【讀書筆記】《JavaScript權威指南》第2章詞法結構

詞法結構的概念

  編程語言的詞法結構是一套基礎性規則,用來描述如何使用這門語言來編寫程序。
  作爲語法的基礎,它規定了諸如變量名是什麼樣的、怎麼寫註釋,以及程序語句之間如何分隔等規則。

字符集

範圍(掌握)

  JavaScript程序是用Unicode字符集編寫的。Unicode是ASCII和Latin-1的超集,並支持地球上幾乎所有在用的語言。ECMAScript 3要求JavaScript的實現必須支持Unicode2.1及後續版本,ECMAScript5則要求支持Unicode3及後續版本。

聯想延伸

  靜態 String.fromCharCode() 方法返回使用指定的Unicode值序列創建的字符串。經常在瀏覽器的按鍵事件使用,可以把索引值(按鍵碼)轉化成該鍵對應的的字符。
例:下例返回字符串 "ABC"

String.fromCharCode(65,66,67)

  注意:該方法返回一個字符串,而不是一個 String 對象。
  由於 fromCharCode 是 String 的靜態方法,所以應該像這樣使用:String.fromCharCode(),而不是作爲你創建的 String 對象的方法。
  由於高位編碼字符是用兩個低位編碼(lower value)表示形成的一個字符,因此String.fromCodePoint() (ES6 規範的一部分)被用來返回這樣一對低位編碼,從而可以完全表示這些高位編碼字符。

區分大小寫(掌握)

  JavaScript是區分大小寫的語言。也就是說,關鍵字、變量、函數名和所有的標識符都必須採取一致的大小寫形式,如果有一個字母大小寫不相同就不是同一個,程序會拋出異常。

需要注意

  HTML並不區分大小寫(儘管XHTML區分大小寫)。由於它和客戶端JavaScript聯繫緊密,因此這點區別很容易混淆。
  許多客戶端JavaScript對象和屬性與它們所表示的HTML標籤和屬性同名。在HTML中,這些標籤和屬性名可以使用大寫也可以是小寫,而在JavaScript中則必須是小寫。例如,在HTML中設置事件處理程序時,onclick屬性可以寫成onClick,但在JavaScript代碼(或者XHTML文檔)中,必須使用小寫的onclick。

空格、換行符(掌握)

  JavaScript會忽略程序中標識之間的空格。多數情況下,JavaScript同樣會忽略換行符。但是有少數情況不會忽略,在下文會講到。

Unicode 轉義序列(瞭解)

  在有些老舊的計算機硬件和軟件裏,無法顯示或輸入Unicode字符全集。JavaScript定義了一種特殊序列,使用6個ASCII字符來代表任意16位Unicode內碼。這些Unicode轉義序列均以u爲前綴,其後跟隨4個十六進制數(使用數字以及大寫或小寫的字母A~F表示)。
  這種Unicode轉義寫法可以用在JavaScript字符串直接量、正則表達式直接量和標識符中(關鍵字除外)。例如,如下兩個JavaScript字符串是完全一樣的:

"cafe"= = ="caf\uooe9"//.=> true

標準化(瞭解)

  Unicode允許使用多種方法對同一個字符進行編碼。比如,字符“é”可以使用Unicode字符uooE9表示,也可以使用普通的ASCII字符e跟隨一個語調符u0301。在文本編輯器中,這兩種編碼的顯示結果一模一樣,但它們的二進制編碼表示是不一樣的,在計算機裏也不相等。Unicode標準爲所有字符定義了一個首選的編碼格式,並給出了一個標準化的處理方式將文本轉換爲一種適合比較的標準格式,JavaScript會認爲它正在解析的程序代碼已經是這種標準格式,不會再對其標識符、字符串或正則表達式作標準化處理。

註釋(掌握)

  JavaScript支持兩種格式的註釋。
  在行尾“/”之後的文本都會被JavaScript當做註釋忽略掉的。。

//這裏是單行註釋
/*這裏是一段註釋*///這裏是另一段註釋
/*
*這又是一段註釋
*這裏的註釋可以連寫多行
*但不能有嵌套的註釋
*/

直接量(瞭解)

  所謂直接量,就是程序中直接使用的數據值。下面列出的都是直接量:

12//數字
1.2//小數
"hello world"//字符串文本
'Hi'//另一個字符串
true//布爾值
false//另一個布爾值
/javascript/gi//正則表達式直接量(用做模式匹配)
null//空

  具體類型講解在後面章節。

標識符和保留字

標識符(掌握)

  標識符就是一個名字。在JavaScript中,標識符用來對變量和函數進行命名,或者用做JavaScript代碼中某些循環語句中的跳轉位置的標記.
  JavaScript標識符必須以字母、下劃線()或美元符($)開始。後續的字符可以是字母、數字、下劃線或美元符(數字是不允許作爲首字符出現的,以便JavaScript可以輕易區分開標識符和數字)。

特殊字符(瞭解)

  出於可移植性和易於書寫的考慮,通常我們只使用ASCII字母和數字來書寫標識符。然而需要注意的是,JavaScript允許標識符中出現Unicode字符全集中的字母和數字。(從技術上講,ECMAScript標準也允許在標識符的首字符後面出現Unicode字符集中的Mn類、Mc類和Pc類坪注7)。由此,程序員也可以使用非英語語言或數學符號來書寫標識符。

var sí=true;
var π=3.14;

保留字(瞭解)

  JavaScript把一些標識符拿出來用做自己的關鍵字。因此,就不能再在程序中把這些關鍵字用做標識符了。值得注意的是,這些保留字中的一部分在ES6中已經使用了。此外,還有一些關鍵字在普通的JS代碼中是合法的,但是在嚴格模式下是保留字。另外,JS中內置了很多全局變量和函數,應當避免把他們的名字用作變量名和函數名。此處不做詳細列出,自行搜索。

可選的分號(掌握)

  我見過很多初學者沒有注意到這個問題,不知道JavaScript的分號大多情況是可以不寫的,然後每次程序出錯時,爲了找出哪裏沒有分號,都看成“鬥雞眼”了,還浪費了時間。
  需要注意的是,JavaScript並不是在所有換行處都填補分號:只有在缺少了分號就無法正確解析代碼的時候,JavaScript纔會填補分號。換句話講(類似下面代碼中的兩處異常),如果當前語句和隨後的非空格字符不能當成一個整體來解析的話,JavaScript就在當前語句行結束處填補分號。
  這裏有個知乎討論,JavaScript 語句後應該加分號麼?,這個semi 是一個自動加分號的工具,其中還介紹了Eslint如何自動加分號。不過我勸你還是加分號,能夠減少很多不必要的麻煩,多活幾年。。。

不能省略分號的情況(掌握)

  聲明變量時特別注意!

a=3;b=4;
var y=x+f
(a+b).toString()

  通常來講,如果一條語句以“(”、“[”、“/”、“+”或“-”開始,那麼它極有可能和前一條語句合在一起解析。以“/”、“+”和“一”開始的語句並不常見,而以
“(”和“[”開始的語句則非常常見,至少在一些JavaScript編碼風格中是很普遍的。有些程序員喜歡保守地在語句前加上一個分號,這樣哪怕之前的語句被修改了、分號被誤刪除了,當前語句還是會正確地解析:

var x=0//這裏省略了分號
;[x,x+1,X+2].forEach(console.1og)//前面的分號保證了正確地語句解析

  return、break和continue語句後面換行會自動插入分號,可以在結尾加{} 或(),代碼寫在其中這樣會避免 return 設計錯誤。
  涉及“+ +”和“--”運算符的時候,如果將其用做後綴表達式,它和表達式應當在同一行。否則,行尾將填補分號,同時“++”或“--”將會作爲下一行代碼的前綴操作符並與之一起解析。

x
++
y

  這段代碼將解析爲“x;+ +y”,而不是“x++;y”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章