「JavaScript語法」:修訂間差異
從 JSON 檔案批量匯入 |
(無差異)
|
於 2025年8月22日 (五) 13:01 的最新修訂
JavaScript 語法是編寫該語言程序的一套規則。
JavaScript 標準庫欠缺官方標準的文本輸出函數(除了 ` document . write `)。 因為 JavaScript 主要用佇現代網頁瀏覽器上執行客戶捀跤本,差不多所有瀏覽器攏支持 ` alert ` 函數。下述舉例中使用標準文本輸出的 console 對象的 log 函數。
起源
布蘭登 ・ 艾克佇咧 JavaScript 一孵一規範的第一段中總結如下:
> JavaScript 對 Java 借來大部份的語法,毋過也自從 Awk 和 Perl 繼承,佇咧其對象原型系統內底閣受著 Self 的一寡間接影響。 > >
基礎
寫敏感
JavaScript 是大細寫敏感的。定定以一个大寫字母開始構造函數的名稱,一个小寫字母開始函數抑是變量的名。
例:
空白佮分號
無成佇咧 C 語言內底,JavaScript 原始碼中的空白會當直接影響形式語義學。JavaScript 里的語句用分號結束。因為自動分號插入去(ASI), 也就是講,一寡符合語法規則的語句咧分析著換行符的時會予人認為是完整的,親像佇咧換行符仔頭前插入一个分號。一寡當局建議顯式的寫結束語句的分號,因為伊無的確會減少自動分號插入去毋捌按算的效果。
有兩个問題:有五个符記既然開始一條語句,嘛會當擴展一條完整的語句;佮五个受限的語句(production), 其中換行佇咧一寡位置毋允准,藏佇咧可能會產生無正確的解析。
五个有問題的符記是倒圓括號「` ( `」,左方括號「` [ `」,斜線「` / `」,加號「` + `」,減號「`-`」。 當然喔,倒圓括號佇隨調用函數表達式的模式當中真捷看著,左方括號有時出現,其他幾个就真少矣。規範內底共出的示例是:
有建議頭前的語句以分號結束。 一寡人建議佇咧「` ( `」抑是「` [ `」開始的行,使用 _ 前導 _ 分號,予這途袂意外地佮頂一行連接。這予人叫做是防禦性分號,特別推薦,因為若無佇咧重新排列代碼的時陣可能是變做兩交稜兩可。比如講:
頭仔的分號有時仔嘛佇咧 JavaScript 庫中使用,佇𪜶予人逐加去另外一个省略尾部份號的庫的情形下,因為這可能會致使初初語句的霧霧無清。 五个受限的語句是 ` return `,` throw `,` break `,` continue `,佮後導遞增抑是遞減。佇所有的情況里,插入分號無解決問題,毋過予解破的語法閣較清楚,錯誤閣較會當檢測。` return ` 和 ` throw ` 取一个可選的值,` break ` 和 ` continue ` 取一个可選的標籤。所有的狀況之下,攏建議使值抑是標籤佮語句保持佇咧一行上。上濟的情況是倒轉去語句,一个人可能想欲倒轉去一个大的對象文字,伊可能意外地予人囥佇咧新行頂懸。對於後導遞增抑是遞減,有可能佮前綴遞增抑是遞減模稜兩可,所以閣一改推薦共遮的囥踮內底仝途的。
注釋
注釋語法佮 C + + , Swift , 佮足濟其他的程式語言相仝。
變量
標準 JavaScript 中的變量無佮加類型,因此任何值得(每一个值攏有一个類型)會當存儲佇任何變量內底。對 ES 六(該語言的第六版)開始,變量會使用 ` var ` 聲明函數範圍變量,而且 ` let ` 抑是 ` const ` 用佇咧角級的變量。佇咧 ES 六進前,變量干焦會使用 ` var ` 語句聲明。分配給用 ` const ` 這聲明的變量的值袂當閣較改,毋過其屬性會當。變量的這个標識符著愛以字母、下劃線 ( ` _ ` ) 抑是美元符號 ( ` $ ` ) 一開頭,啊若後續字符嘛會當是數字 ( ` 空九九 ` )。JavaScript 分大細寫按呢,就按呢大寫字符「A」到「Z」佮彼小寫字符「a」到「z」無仝。
對 JavaScript 一孵五開始,會當佇標識符中使用 ISO 八千八百五十九孵一抑是 Unicode 字符(抑是 ` \ uXXXX ` Unicode 轉義序列)。 佇咧某一寡 JavaScript 實現中,會當佇標識符中使用 at 符號 ( @ ),但這个規範顛倒反,並且佇咧較新的實現中無支持。
作用域佮提升
用 ` var ` 聲明的量是佇函數級別的詞法作用域,咧用 ` let ` 抑是 ` const ` 聲明的變量有一塊級作用域。因為聲明是佇任何代碼執行進前處理的,因此會當佇咧代碼中聲明進前分配佮使用變量。這予人叫做是提升( hoisting ),伊比佇函數抑是塊的頂懸向聲明的變量。
對於 ` var `、` let ` 和 ` const ` 語句,干焦聲明被提升;毋過有價值無予人提升。所以,函數中央的 ` var x=一 ` 語句等效於函數頂懸的 ` var x ` 聲明語句,和函數中央這點的 ` { { { 一 } } } ` 這个語句。這意味注意佇聲明進前袂使予人訪問;頭前向引用 ( forward reference ) 是無可能的。使用 ` var ` 變量的值在初初化進前是未定義的 ( ` undefined ` )。使用 ` let ` 抑是 ` const ` 聲明的改變佇初初無法度訪問,就按呢進前引用這種的變量會致使錯誤。
函數聲明,伊聲明一个變量並為其分配一个函數,類似變量語句,但是除了會使提升聲明以外,𪜶閣提升足值的—— 敢若規个語句出現佇包含的函數的頂懸仝款—— 所以頭前向引用 ( forward reference ) 嘛是允准的:函數語句咧包含伊的函數中的位置是無相關的。這無仝佇咧 ` var `、` let ` 抑是 ` const ` 語句內底將函數表達式值予變量。
因而,如:
塊作用域會當通過將規个塊包裝佇一个函數中然後執行伊來產生—— 這个被稱做隨調用函數表達式模式—— 抑是通過使用 ` let ` 關鍵字聲明變量。
伊聲明佮這个價值
佇咧作用域外聲明的變量是全局變量。若一个變量佇閣較懸的作用域中聲明,伊會當予人作用域 ( child scope ) 訪問。
當 JavaScript 想欲試看覓析標識符合的時陣,伊會佇本地做用域內查揣。若是無揣著這个標識符仔,伊會佇後一个外部作用域內底查某揣,照這寡推捒,一直到全局變量所在的全局作用域。若是猶未揣著,JavaScript 將引發 ` ReferenceError ` 異常。
予這个標識符合的時陣,JavaScript 會通過完全仝款的過程來取此標識符;但是若是全局範圍內底揣無伊,共佇創建的作用域內創建「變量」。 所以,若予無聲明的改變按呢,會予創建做一个全局變量。佇咧全局範圍內底(就佇任何函數體以外抑是講佇咧 ` let / const ` 的情況下為一塊)聲明一个變量(使用關鍵字 ` var `), 或者是予一个未聲明的標識符賦值,抑是向全局對象(通常是窗仔口)添加一个屬性,這將創建一个新的全局變量。
請注意,JavaScript 的嚴格模式 ( strict mode ) 禁止予未聲明的改變,對而且避免全局號名的空間汙染。
例
變量聲明佮作用域的一寡例:
基本的數據類型
JavaScript 語言提供六種的基本數據類型 :
- Undefined
- Number
- BigInt
- String
- Boolean
- Symbol
一寡基本的數據類型閣提供一組號名值來表示類型邊界的範圍。遮的號名值佇下跤的相應子節中描述。
Undefined
「 undefined」值予人價值的所在未初化變量,咧查看不存在的對象屬性嘛倒轉來這个值。佇布爾頂下文中,未定義值被認為是假值。
注意:undefined 被認為是真正的基本數據類型。除非顯式轉換,若無佮佇邏輯之下文中的評估做 false 的其他類型相比並,未定義的值可能會出現不可按算的行為。
注意:無內建的語言字面量用佇咧 undefined。所以 ` ( x===undefined ) ` 並毋是一个萬無一失的放式檢查一个變量是毋是 undefined,因為佇咧 ECMAScript 五進前的版本,你若寫代碼 ` var undefined=" I'm defined now " ; ` 是合法的。閣較魯棒的較方法是 ` ( typeof x==='undefined') ` .
下屬函數袂曉如期望按呢做工課:
調用 ` isUndefined ( my _ var ) ` 會拋出來 ReferenceError,若是 my \ _ var 是無智識符,猶毋過 ` typeof my \ _ var==='undefined'` 袂拋出來。
Number
Number 數據類型表示 IEEE 鋪七百五十四浮點雙精度。袂當精確表示一寡仔實數抑是分數。如:
所以,無論何時格式化輸出,攏應使用諸如 toFixed ( ) 方法之類的例程對數字進行捨入。
數字會當用遮的符號中的任何一種來指定:
ES 二千空二十一引入了數字分隔符 \ _ ( the underscore ):
Number 類型的範圍+ ∞,−∞和NaN( Not a Number ) 會當迵過兩个程序表達式得著:
Infinity 和 NaN 是數字:
這三个特殊值對應並按照 IEEE 鋪七仔五十四描述的方式運行。
Number 構造函數(用作函數), 抑是一箍 + 抑是-可以佇執行顯式數值轉換:
當用做構造函數的時,會創建一个數值包裝對象(就算講伊用處無偌大):
猶毋過,NaN 無等於家己:
BigInt
BigInts 可以佇任意大的整數。特別是大於兩百五十三-一的整數,這是 JavaScript 會用得 Number 原語會當靠表示的上大的數字,並由 Number . MAX \ _ SAFE \ _ INTEGER 常量表示。
Math 的方法無支持 BigInt。
JSON . stringify 無支持 BigInt,需要 ` BigInt . prototype . toJSON=function ( ) { return this . toString ( ) ; } ` 了後就會當支持。
toString 方法支持 BigInt,radix 有效值是 [二 , 三十六],默認是十。
BigInt 除法,結果會去予人扯斷做是整數,毋是浮點數。如:` 一百 n / 七 n ; ` 結果為十四 n,毋是浮點數。
String
JavaScript 中的字符串是一字符序列。佇咧 JavaScript 中,會當通過共一系列字符囥佇咧雙引號 ( " ) 抑是單引號 (') 之間直接創建字符串(做字面量)。 此種字符串著愛寫佇咧單行上,但是會使包含轉義的換行符(如 \ n ) . JavaScript 標準允准反引號字符(`,即重音符抑是反撇號)引用濟行字符串字面量,但是這干焦佇二空一六年開始的某一寡瀏覽器頂懸支持:Firefox 和 Chrome,猶毋過 Internet Explorer 十一無支持。
會用得使用 charAt 方法(由 String . prototype 提供)訪問字符合串中的單字符。這是訪問字符串中的孤字符時的首選方式,因為伊嘛適用非現代瀏覽器:
佇現代瀏覽器當中,會當通過和數組仝款的表示法訪問字符串中的孤一字符:
猶毋過,JavaScript 字符合是不可變的:
若字符合作物件有仝款的內容,是將相等運算符 ( "==" ) 應用佇兩字符串將回回 true,這意味對:有仝款的長度並包含仝款的字符序列(大細寫對字母真重要)。 所以:
除非轉義,若無袂當楷套仝款的引號:
String 構造函數創建一字符串對象(一个包裝字符串的對象):
遮的對象有一个 valueOf 方法,倒轉去包裝佇其中的原始字符合:
兩个 String 對象之間的相等和字符串原語無仝:
Boolean
JavaScript 提供一个帶有真假字面量的布爾數據類型。typeof 運算符為遮的基本類型倒轉字符串「" boolean "」。 佇邏輯頂下文中使用的時,因為自動類型轉換,零、板零、null、NaN、undefined 佮空字符合 ( " " ) 求值為 false。彼个所在有其他的價值(前一个列表的補集)求值為 true,包括字符捾 " 零 "、" false " 佮任何的對象。
類型轉換
使用類型檢查的較運算符 ( `===`和 ` !==` ) 會當避免相等較運算符 ( `==` 和 ` !=` ) 的自動類型強制 ( type coercion )。
當需要類型轉換時,JavaScript 會不會如下跤式轉換 Boolean、Number、String 抑是 Object 操作數:
Number 和 String
- 字符串被轉換做數字值。JavaScript 試看覓將字符串數字面量轉換做數字類型的值。首先,對字符串數字面量推導出數學值。紲落來欲按呢值四捨五入到上接近的數字類型值。
Boolean
- 若其中一个操作數是布爾值,則布而操作數若為 true 著愛轉換做一,若為著 false 轉換做零。
Object
- 若共對象佮數字抑是字符合進行較,JavaScript 會試看覓仔轉來對象的恬認值。使用對象的 . valueOf ( ) 抑是 . toString ( ) 方法共對象轉換做基本 String 抑是 Number 值。若失敗,會生做運行的時錯誤。
道格拉斯 ・ 克羅克福特提倡用「truthy」和「falsy」來描述各種類型的值佇邏輯頂下文中的行為方式,特別是佇邊仔狀況下。佇咧 JavaScript 的早期版本內底,兩箍邏輯運算符倒轉一个布爾值,這馬𪜶閣倒轉來一个操作數。佇合取 ( ` a & & b ` ) 時,若佇倒操作數為 false,則倒轉來操作數;抑是佇析號 ( ` a | | b ` ) 時,若佇倒操作數為 true,則倒轉來操作數;抑若無倒轉來操作數。對於混合了布爾操作數和 number 兼容操作數(包括會當計算講 number 彼字符捾,抑是講會當計算做這種字符合的對象), 較運算符合的自動類型強制可能會有所無仝,因為布爾操作數將作為一个數值被較。這可能意料出。表達式會當通過雙重邏輯若無定著運算符:( ! ! )、使用 Boolean ( ) 函數抑是使用條件運算符:( ` c ? t : f ` ) 顯式轉換做布爾基本的類型。
new 運算符合會當用佇咧布爾基本類型創建對象包裝器。猶毋過,typeof 運算有符合無回對象包裝器的 boolean,伊閣倒轉來 object。因為所有的對象攏求值為 true,所以著愛使用諸如 . valueOf ( ) 抑是 . toString ( ) 啥物款的方法來檢索包裝的值。對於 Boolean 類型的顯式強制,Mozilla 建議優先使用 Boolean ( ) 函數(無咧 new)毋是 Boolean 對象。
Symbol
ECMAScript 六引入來的新類型。一个 _ Symbol _ 是獨一無二而且不可變的標識符。
比如講:
存在 _ well known symbols _。其中一个是 ` Symbol . iterator ` ; 若程序實現矣 ` Symbol . iterator `,則伊是迵天代的:
原生對象
JavaScript 語言提供一寡原生的對象 ( native object )。JavaScript 原生對象予人認為講是 JavaScript 規範的一部份。就算講有 JavaScript 環境,但是這組的對象應該已經落尾矣。
Array
數組 ( array ) 是對 ` Array ` 構造函數原型化的 JavaScript 對象,專門設計用存儲由整數鍵索引的數據值。數組佮基本的 Object 類型無仝,伊是有方法佮屬性的原型,以幫助程式設計師完成日常任務(比如講,` join ` , ` slice ` 和 ` push `)。
佮 C 語言家族的程式語言仝款,數組使用對零開始的索引方案:通過 ` push ` 方法插入空數組的值占據數組的第空个索引。
數組有一个 ` length ` 屬性,保證總是大於數組中使用的上大整數索引。若創建有閣較大的索引起的屬性,伊會自動更新。共較細的數字寫入去 ` length ` 這屬性將刪除比較大的索引。
會使用普通對象屬性訪問表示法訪問 ` Array ` 元素:
以上兩个是等價的。袂當用啦「點」表示法抑是帶代數字表示的字符串:
聲明一个數組可用 ` Array ` 字面量抑是 ` Array ` 構造函數 :
數組實現為「疏櫳數組」,只有定義的元素占用內存。設置 ` myArray [十]='someThing'` 和 ` myArray [五十七]='somethingOther'` 只為這兩个元素分配著內存空間,這佮任何的對象仝款。數組的 ` length ` 猶原報告為五十八。數組的上大長度為四 , 兩百九十四 , 九百六十七喔 , 兩百九十五,對應三十二位二進位無符號數 ( 11111111111111111111111111111111 ) 二。
會當使用對象聲明字面量來創建其他的行為類似其他的語言中的關聯數組對象:
會當使用對象和數組聲明字面量來快速創建關聯數組、多維數組或者是兩个有的數組。對技術上講,JavaScript 無支持多維數組,毋過會當使用數組數組來模仿𪜶:
Date
` Date ` 對象存儲有符號的毫秒計數,空表示一千九百七十五一鼻一零 : 零 : 零 UT,值域為 ± 一百空八工。有幾種方法通為講 ` Date ` 構造函數提供參數。注意,月份是踮無開始。
提供矣抽取欄位的方法,以及有用的 ` toString ` :
Error
用 ` Error ` 類會使創建定製的錯誤消息 :
這會使予 try . . . catch . . . finally 塊掠著。欲佇咧異常處理節內底詳細。
Math
The Math object contains various math-related constants ( for example , ) and functions ( for example , cosine ) . ( Note that the object has no constructor , unlike or . All its methods are " static " , that is " class " methods . ) All the trigonometric functions use angles expressed in radians , not degrees or grads . Math 對象包含各種佮數學相關的常數(比如講,π)佮函數(比如講,餘弦)。 請注意,佮 Array 抑是 Date 無仝,Math 對象無構造函數。伊的所有的方法攏是「靜態的」,即「類」方法。所有三角函數攏使用以弧度表示角度,毋是度數抑是百分度。
正則表達式
字符類
字符匹配
重複
Anchors
子表達式
Flag
高級方法
Capturing group
函數
JavaScript 的逐个函數是 ` Function ` 構造符的一个實例。當然猶閣有 async / generator 函數構造符:( async ( )=> { } ) 構造符得著 AsyncFunction , ( async function \ * ( ) { } ) 構造符得著 AsyncGeneratorFunction , ( function \ * ( ) { } ) 構造符得著 GeneratorFunction。
上述加法函數嘛會當定義做函數表達式 :
ES 六中,增加箭頭函數語法 ( arrow function syntax )。佮 ` function ( ) { } ` 表達式無仝款,𪜶猶保留全局對象的 ` this ` 毋是對調用伊的位置 / 調用時的值來繼承伊。
對於需要提升的函數,專門的表達式:
提升允准你佇聲明進前咧使用伊:
函數實例可具有屬性佮方法:
運算符
'+'算符重載:伊用佇字符串連接和算術加法。當無意中混合字符合佮數字的時陣,這可能會致使問題。做一元運算符,伊會當將數字符串轉做數字。
類似地,'\ *'算符嘛是重載的:會當共字符符合轉做數。
算術運算符
JavaScript 支持之下二元算術運算符:
JavaScript 支持之下酉算術運算符:
比如講:
模運算符顯示除了模數以後的餘數。若牽涉著負數,是轉來值得決定操作數。
愛始終返回非負數,請重新添加模數閣再應用模運算符 :
有複合運算符合
基本類型的這个價值:
對象類型的這个價值:
解構才值
` ` ` at its leaves that are to receive the substructures of the assigned value . ` ` `
佇咧 Mozilla 的 JavaScript 中,對一鋪七版開始,解構才值 ( destructuring assignment ) 允准一改將部份資料結構分值予濟个變量。去予值的倒爿去是一个類似佇任意1875套的對象 / 數組字面量的模式,佇其葉仔處包括左值將接收賦值的子結構。
擴展 / 休息運算符
ECMAScript 兩千空一十五標準引入了「` . . . `」運算符,用佇咧「擴展語法」( spread syntax ) 和「賰參數」( rest parameters ) 的相關概念。
擴展語法提供了另外一種解構數組的方法。伊表示指定數組中的元素應用作函數調用中的參數或數組字面量中的項。
嘛會使講," ` . . . ` " 共 " ` [. . . foo] ` " 變換做 " ` [foo [ 零] , foo [一] , foo [二] ] ` ",而且 " ` this . bar ( . . . foo ) ; ` " 變換做 " ` this . bar ( foo [零] , foo [一] , foo [二] ) ; ` ":
當咧函數聲明中使用 ` . . . ` 時,伊表示一个賰參數( rest parameter )。參數必須是函數參數列表中的上正爿的號名參數。伊將被賦值一个 ` Array `,包括傳達予函數超過其他號名參數的任何多餘的參數。嘛會使講,伊獲取傳遞予函數的「加的」參數(因此號名)。
賰的參數類似於 Javascript 的 ` arguments ` 對象,伊是一个類似數組的對象,包含講當前函數調用中的所有參數(號名佮無號名)。 毋過,佮 ` arguments ` 參數無仝的是,賰參數是真正的 ` Array ` 對象,所以會當直接共使用 ` . slice ( ) ` 和 ` . sort ( ) ` 等方法。
` . . . ` 運算符干焦會當和 ` Array ` 對象做伙使用。毋過,佇咧未來 ECMAScript 標準中,有人提議會當擴展到 ` Object `。)
較運算符
引用對象的變量干焦引用仝一个對象的時陣才相仝或者是相仝:
參見 String .
邏輯運算符
JavaScript 提供四个邏輯運算符:
- 酉運算邏輯非 ( ` NOT=! a ` )
- 二元運算析取 ( ` OR=a | | b ` ) 佮合取 ( ` AND=a & & b ` )
- 三元條件運算符 ( ` c ? t : f ` )
佇邏輯運算頂下文中,除了共達式以外,任何表達式的計算結果攏為著 true:
- 字符串 : ` " " ` , `` ,
- 數 : ` 零 ` , ` 板零 ` , ` NaN ` ,
- 特殊 : ` null ` , ` undefined ` ,
- 布而已 : ` false ` .
布爾函數通用佇顯式轉換做基礎類型 ` Boolean ` :
The NOT operator evaluates its operand as a Boolean and returns the negation . Using the operator twice in a row , as a double negative , explicitly converts an expression to a primitive of type Boolean :
三元運算符可以佇顯式轉換:
使用了後增加 ( ` i + + ` ) 等等性的表達式有預期的副作用。JavaScript 提供了表達式的短路求值;干焦做倒操的作數無夠才調表達式的值時陣,正操作數才被執行。
In early versions of JavaScript and JScript , the binary logical operators returned a Boolean value ( like most C-derived programming languages ) . However , all contemporary implementations return one of their operands instead : 佇咧 JavaScript 和 JScript 的早期版本內底,兩箍邏輯運算符倒轉一个布爾值(親像大多數對 C 派生的程式語言仝款)。 猶毋過,所有 Javascript 的當代實現攏倒轉來其操作數之一:
閣較熟似 C 中的行為的程式設計師可能會發現這个特性予人按呢驚疑,但是伊允准閣較簡潔地表達模式,如空值結合運算符:
邏輯有值
照位運算符
比如講 :
JavaScript 支持酉照位運算符:
位操作值
比如講 :
字符串
比如講 :
? ?
控制結構
複合語句
一對大括號 ` { } ` 佮一个封閉的語句序列構成一个複合語句,會當佇任何會當用語句的所在使用。
If . . . else
三元調解運算符
條件運算符創建一个表達式,欲表達式根據條件計算是兩个表達式之一。這類似根據條件選擇兩个語句之一執行的「if」語句。即,條件運算符合表達式就像 _ if _ 之於語句。
等價於:
佮 _ if _ 語句無仝,條件運算符不能省略其「else-branch」。
Switch 語句
JavaScript 的 switch 語句如下 :
- ` break ; ` 是可選的;猶毋過,通常需要伊,因為無代碼執行會繼續到後一个案例塊的主體。
- 成做預防措施,佇一个案例的尾仔摻一个 break 語句,以防以後添加其他的案例。
- 會當用字符合作字面量作為 case 值。
- 會當使用表達式代替值。
- 當表達式不匹配任何其他指定的狀況時,執行恬認情況(通選)。
- 大括號是必需的。
For 循環
抑是:
For . . . in loop
- 遍歷對象的所有可枚舉屬性。
- 遍歷數組的所有咧用索仔,包括數組對象的所有用戶定義屬性(伊若有)。 所以,佇咧遍歷數組的時陣,上蓋好使用傳統的 for 循環對索引的所有值循環。
- 無仝的 Web 瀏覽器佇咧 for . . . in 循環語句反映啥物屬性方面存在差異。理論上,這是由 ECMAscript 標準定義的叫做「DontEnum」的內部狀態屬性控制的,但實際上,逐个瀏覽器佇自省期間倒轉去的屬性集略有無仝。使用 ` if ( some \ _ object . hasOwnProperty ( property \ _ name ) ) { . . . ` } 測試予定屬性足有路用的。所以,使用 ` Array . prototype . newMethod=function ( ) { . . . ` } 共數組原型添加方法可能會致使 ` for . . . in ` 循環遍歷方法的名稱。
While 循環
Do . . . while 循環
With
with 語句將所有予定對象的屬性佮方法添加到以下塊的範圍內底,予𪜶予人引用,就敢若𪜶是局部變量仝款。
- 請注意佇逐改 getElementById ( ) 調用進前欠缺 document .。
因為乎 with 語句的可用性會阻礙程序性能並且予人認為會降低代碼的清度度度(因為任何予定的變量實際上可能是封閉 with 的屬性), 所以佇遮「嚴格模式」中間無允准使用此語句 .
Label
JavaScript 佇大多數實現中攏支持1875套標籤。會當做是 break 語句標記循環或者是,為 ` continue ` 標記循環。雖然 ` goto ` 是保留字,` goto ` 佇咧 JavaScript 中未實現。
函數
函數無倒轉來語句的狀況下,是轉來厝值 undefined。
函數時頭等等的對象,會當有價值予其他的變量。
調用函數時予出的參數量無一定佮函數定義中的參數量相對應;咧調用的時陣無匹配實參的號名形參具有值 undefined(會當隱式轉換做 false)。 佇函數內底,參數嘛會使通過 arguments 對象訪問;這提供使用索引訪問所有參數(比如講 ` arguments [零] , arguments [一] , . . . arguments [n] `), 包括遐的超出號名參數量的參數。(雖然參數列表具有 ` . length ` 屬性,伊毋是 Array 的實例;伊無諸如 . slice ( )、. sort ( ) 等)
原始值(數字、布爾值、字符串)照值傳達。對象來講,伊是對傳達的對象的引用。
函數會當佇咧其他函數內部聲明,並訪問外部函數的局部變量。此外,著算佇外部函數退出了後,𪜶嘛會通過記住外部函數的局部變量來實現完整的閉包。
Async / await
對象 Object
為方便起見,類型通常予人幼分做「基本」( primitives ) 和「對象」。 對象是有標識符的實體(𪜶干焦佮家己仝款)並將屬性名稱射到值(基於原型編程術語內面的「槽」slot)。 對象會當予人認為是關聯數組抑是散列 ( hash ),並且通常使用遮的資料結構來實現。猶毋過,對象有其他功能,譬如講原型鏈 ( prototype chain ),這是普通關聯數組所無的。
JavaScript 有幾若種內面的對象,分別是 ` Array `、` Boolean `、` Date `、` Function `、` Math `、` Number `、` Object `、` RegExp ` 和 ` String `。其他的對象是「宿主對象」( host object ),毋是由語言定義,是對運行的時陣環境定義。比如講,佇瀏覽器當中,典型的宿主對象屬於 DOM(窗口、表單、連結等)。
創建對象
會當使用構造函數抑是對象字面量創建對象。構造函數會當使用內置的 Object 函數抑是自定義函數。按照慣例,構造函數的名稱以大寫字母開頭:
對象字面量和數組字面量允准人輕鬆創建靈活的資料結構:
這是 JSON 的基礎,伊是一種使用類似 JavaScript 的語法進行數據交換的簡單表示法。
方法
method 是一个已經分配予對象的屬性名稱的函數。佮真濟物件導向的語言無仝款,咧佮對象有關係的 JavaScript 中,函數定義佮方法定義無區別。相反,區別耶發生在函數調用期間。函數會當做為方法調用。
成做方法調用的時陣,標準局部變量 _ this _ 會自動設置做 " . " 倒爿的對象實例。(閣有 _ call _ 和 _ apply _ 方法會當顯式設置 _ this _-一寡包,比如講 jQuery 用 _ this _ 做無四序的代誌。)
佇下跤的示例中,Foo 予人用做構造函數。構造函數無啥物特別的所在—— 伊只是一个初初的對象的普通函數。當佮 _ new _ 關鍵字做伙咧使用的時陣,通常情況下,_ this _ 設置做新創建的空白的對象。
請注意,佇下跤的示例中,Foo 只是為著槽分配值,其中一寡值是函數。因此伊會當為無仝的實例分配無仝的功能。此示例中無原型設計。
構造函數
構造函數只需要值分配予新創建對象的槽。遮的值得是數據抑是講其他的函數。
示例:操作對象:
構造函數本身咧對象原型的「構造函數」槽內底予人引用。所以乎,
函數本身就是對象,會當用來產生類似「靜態屬性」(使用 C + + / Java 術語)的效果,如下所示。(函數對象猶閣有一个特殊的 ` prototype ` 屬性,像下跤的「繼承」部份咧講。)
對象刪除足少的使用,因為跤本 ia̋n-jín 將糞埽收集無閣予人引用的對象。
繼承
JavaScript 以 Self 的方式通過原型設計 ( prototyping ) 支持繼承層次結構。
佇以下示例中,Derived 類繼承自 Base 類。當 d 創建為 Derived 時,著 Base 基礎實例的引用予人複製著 d . base。
Derive 無包括 aBaseFunction 的值,所以咧訪問 aBaseFunction 時從 aBaseFunction 檢索伊。這會當通過改變 base . aBaseFunction 的值來明確,這反映佇咧 d . aBaseFunction 的值中。
一寡實現允准使用 \ _ \ _ proto \ _ \ _ 槽顯式訪問抑是設置的原型,如下所示。
下跤清楚的顯示矣佇實例創建的時對原型的引用是按怎「複製」的,但是對原型的更改會影響引用伊的所有實例。
咱佇實踐中,使用遮的主題的真濟變體,伊可能是強大閣予人憢疑。
異常處理
JavaScript 包含一个 ` try . . . catch . . . finally ` 異常處理語句來處理運行的時錯誤。
` try . . . catch . . . finally ` 語句學著由錯誤抑是 throw 語句致使的異常。伊的語法如下:
上代先,try 塊中的語句執行。若拋出異常,跤本的控制流會隨轉移到 catch 塊內底的語句,異常可用作錯誤參數。抑無來共跳過 catch 塊。若是 catch 塊無想欲處理特定的錯誤,伊會當 throw ( errorValue )。
佇任何情形下,finally 塊中的語句攏會予人執行。這會當用著釋放資源,雖然內存會自動進行糞埽回收。
會當省起來 catch 抑是 finally 子句。catch 參數是必需的。
Mozilla 實現允真濟个 catch 語句,做對 ECMAScript 標準的擴展。𪜶遵循類似 Java 著使用的語法:
佇瀏覽器當中,onerror 有比講這个異常閣較捷用。
本地函數佮方法
佮網頁瀏覽器無相關。
eval ( 表達式 )
將第一个參數算做表達式,其中會使包括語句值。表達式會當引用函數的局部變量。猶毋過,` eval ` 代表著主要的安全風險,因為伊允准不良行為者執行任意代碼,所以無共鼓勵使用。
參考文獻
進一步來讀冊
- Danny Goodman : _ JavaScript Bible _ , Wiley , John & Sons , ISBN 空九七千六百四十五五五三千三百四十二孵八 .
- David Flanagan , Paula Ferguson : _ JavaScript : The Definitive Guide _ , O'Reilly & Associates , ISBN 空抹五百九十六抹一一空一百九十九九陽六 .
- Thomas A . Powell , Fritz Schneider : _ JavaScript : The Complete Reference _ , McGraw-Hill Companies , ISBN 空九七五二十一鋪九千一百二十七鋪九 .
- Axel Rauschmayer : _ Speaking JavaScript : An In-Depth Guide for Programmers _ , 四仔六 pages , O'Reilly Media , 二十五 February 二千空一十四 , ISBN 九百七十八孵十四抹四千九百三十六曲五千空三十五 . ( free online edition )
- Emily Vander Veer : _ JavaScript For Dummies , 四 th Edition _ , Wiley , ISBN 空九五七千六百四十五五五七千六百五十九九嬸三 .
外部連結
- A re-introduction to JavaScript-Mozilla Developer Center
- JavaScript Loops
- ECMAScript standard references : ECMA 被二百六十二
- Interactive JavaScript Lessons-example-based
- JavaScript on About . com : lessons and explanation
- JavaScript Training
- Mozilla Developer Center Core References for JavaScript versions 一垺五 , 一孵四 , 一孵三 and 一孵二
- Mozilla JavaScript Language Documentation