《JavaScript語言精粹》—— 語法篇


導讀:我看這本書也已經有好幾遍了,每一次都會發現新的大陸,拍手稱快!為了更進一步的學習一遍,另外也算是把這本書變成我的手冊。把所需要的,好的東西記錄在這里,這樣以后可以一遍又一遍的回顧。祝我在這條路上走得越來越遠。

 

一、語法

(1) 標識符

標識符是由一個字母開頭,其后可以選擇性的加上一個或多個字母、數字或者下划線。

保留字是不能被使用的,(這在我寫的《深入理解JavaScript》—— Day1里面有寫到)。另外本應該作為保留字的undefined、NaN和Infinity也同樣的不能使用。但是在對象字面量中的屬性名可以使用,但是需要加上引號,並且更糟糕的是不能使用點(.)來訪問,只能使用中括號([])來訪問該屬性名。切記!

var a = {
    'NaN' : 'not a number'
};
console.log(a['NaN']);  // not a number

所以我的建議是不要使用保留字是最好的選擇。

注:標識符被用於語句、變量、參數、屬性名、運算符和標記。

(2) 數字

JavaScript只有一個數字類型。它是內部被表示為64位的浮點數。但是沒有分離出整型類型,所以1和1.0值是相同的。

① 如果數字字面量有指數部分,那么這個字面量的值等於e之前的數字與10的e之后數字的次方相乘。所以100和1e2是相同的。

② 負數可以在前置運算符 - 加數字構成。

③ NaN是一個數值,它表示一個不能產生正常結果的運算結果。NaN不等於任何值,包括它自己。你可以用isNaN來檢測NaN。

④ Infinity表示所有大於1.79769313486231570e+308的值。

⑤ 數字擁有方法。JavaScript有一個對象Math,它包含一套作用於數字的方法。

(3) 字符串

字符串字面量可以被包在一對單引號或者雙引號中它可以包括0個或多個字符。\(反斜杠)是轉義字符。JavaScript在被創建的時候,Unicode是一個16位的字符集,所以JavaScript中所有字符都是16位的。

① JavaScript中沒有字符類型。要表示一個字符,只需要創建僅包含一個字符的字符串即可。

② 轉義字符可以吧那些正常情況下不允許的字符插入到字符串中,比如反斜杠、引號和控制字符。\u 約定用來指定數字字符編碼。

“A” === “\u0041”

③ 字符串有一個length屬性。例如“seven”的length是5。

④ 字符串是不可變的。一旦被創建,就永遠無法改變它。但是你可以通過 + 運算符鏈接其他字符串來創建一個新的字符串。兩個包含相同字符且字符順序相同的字符串也被認為是true。

'a' + 'm' = 'am';

⑥ 字符串也有一些方法。

(3) 語句

一個編譯單元包含一組可執行的語句。在Web瀏覽器中,每個<script>標簽提供一個被編譯且立即執行的編譯單元。

① 當 var 語句被用在函數內部時,它定義的是這個函數的私有變量。

② switch、while、for和do語句允許有一個可選的前置標簽(label),它配合break語句使用。

③ 語句通常按照從上到下的順序被執行。JavaScript可以通過條件語句、循環語句、強制跳轉語句和函數調用來改變執行序列。

④ 代碼塊是包在一對花括號里面的一組語句。不像其他的語言,JavaScript中的代碼塊不會創建新的作用域。因此,定義的變量應該被定義在函數的頭部,而不是在代碼塊中。

⑤ if語句根據表達式的值改變程序流程。表達式的值為真時執行跟在其后的的代碼塊,否則,執行可選的else分支。

⑥ 下面的值被當做假(false):‘’(空字符串)、0、false、 null、undefined、NaN。其他的所有值都是真,其中包括字符串“false”。

⑦ switch語句執行一個多路分支。它把其表達式的值和所有指定的case條件進行匹配。其表達式可能產生一個數字或字符串。當找到一個精確的匹配時,執行匹配的case從句中的語句。如果沒有找到任何匹配,那么執行可選的default語句。

其中一個case從句可以包含一個或多個case語句。case表達式不一定必須是常量。要防止繼續執行下一個case,那么從句后面應該跟隨一個強制跳轉語句。你可以用break退出switch語句。

⑧ while語句執行一個簡單的循環。如果表達式值為假,就終止循環。表達式為真,那么代碼塊被執行。

⑨ for語句是一個更加復雜的循環語句。它有兩種形式。

第一種: 是由3個可選從句控制:初始化語句、條件從句和增量從句。

第二種: 被稱為for-in從句,會枚舉一個對象的所有屬性名。

⑩ do語句就像while語句,唯一的區別就是它在代碼塊執行之后而不是之前檢測表達式的值。這意味着代碼塊至少被執行一次。

11. try語句執行一個代碼塊,並捕獲該代碼拋出的任何異常。catch從句定義一個新的變量來接收拋出的異常。thorw語句拋出一個異常。如果throw語句在一個try代碼塊中,那么控制流會跳轉到catch語句中。如果throw語句在函數中,則該函數調用被放棄,控制流跳轉到調用該函數的try語句的catch從句中。

throw語句中的表達式通常是一個對象字面量,包括一個name屬性和一個message屬性。異常捕獲器可以使用這些信息做些什么。

12. return語句會導致從函數中提前返回。它也可以指定要返回的值。如果沒有指定返回值,那么返回undefined。

注:JavaScript中不允許return關鍵字和表達式之間換行。

13. break語句會使程序退出一個循環語句或switch語句。它可以指定一二可選的標簽,那退出的就是帶該標簽的語句。

注:JavaScript中不允許break關鍵字和標簽之間換行。

(4) 表達式

最簡單的表達式就是字面量值(比如字符串或數字)、變量、內置的值、以new開頭的調用表達式、以delete開頭的屬性提取表達式、包在圓括號中的表達式、以一個前置運算符作為前導的表達式。或者表達式后面跟着:

—— 一個中置運算符與另一個表達式(中置運算符是啥?查了半天也查不到,我還是以后看一遍英文原版的吧)

—— 三元運算符?后面跟着一個表達式,然后一個: ,再接着第3個表達式

—— 一個函數調用

—— 一個屬性提取表達式

① 運算符優先級

. [] () 提取屬性與調用函數
delete new typeof + - ! 一元運算符
* / % 乘法、除法、求余
+ - 加法/連接符、減法
>= <= > < 不等式運算符
=== !== 等式運算符
&& 邏輯與
|| 邏輯或
?:

三元

② typeof的運算值有:number、string、boolean、function、object、undefined。其中null結果是object,這是不對的。我在之前有說過,那么我就不再解釋了。

③ 如果!的運算符的值為真,那么產生false,否則產生true。

④ + 運算符可以進行加法運算符或字符串連接。如果你想要的是加法運算,請確保兩個運算數都是數字。

⑤ / 運算符可能會產生一個非整數的結果,即使兩個運算數都是整數。

⑥ 如果第一個運算數為假,那么&&產生它的第一個運算數的值,否則產生第二個運算數的值。

⑦ 如果第一個運算數為真,那么||產生第一個運算數的值,否則產生第二個運算數的值。

⑧ 函數調用引發函數的執行。函數調用運算符是跟隨在函數名后面的一對圓括號。圓括號中可能包含傳遞給這個函數的參數。

⑨ 一個屬性存取表達式用於指定一個對象或數組的屬性或元素。

(5) 字面量

① 對象字面量是一種可以方便地按指定規格創建新對象的表示法。屬性的名字可以標識符或者字符串。這些名字當做字面量名,所以對象的屬性名在編譯時才能知道。屬性的值就是表達式。

② 數組字面量是一種可以方便按指定規格創建數組的表示法。

(6) 函數

函數字面量定義了函數值。它可以有一個可選的名字,用於遞歸地調用自己。它可以指定一個參數列表,這些參數就像變量一樣,在調用時由傳遞的實際參數初始化。函數的主體包括變量定義和語句。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM