本書關於 ECMAScript 6(官方名稱為 ECMAScript 2015),JavaScript 的新版本。
為了理解本書,你應該已經了解 JavaScript。如果你不了解:我的另一本書「Speaking JavaScript」免費提供線上閱讀,並教授程式設計師所有 JavaScript(包括 ECMAScript 5)。
本書以三個詳細程度探討 ES6
其他需要了解的事項
我早在 ES6 功能有實作之前就開始撰寫本書,這需要大量的研究。重要的來源是
ECMAScript 5 引入了語言模式:嚴格模式透過改變其語意、執行更多檢查和拋出更多例外,讓 JavaScript 成為更簡潔的語言。請參閱「Speaking JavaScript」中的「嚴格模式」一節以取得更多資訊。舊版/預設模式稱為非嚴格模式或隨意模式。
嚴格模式透過以下列開啟(在 ES5 之前的 ECMAScript 版本中,此列不會執行任何動作)
'use strict'
;
如果您將此列放在檔案的開頭,其中的所有程式碼都會處於嚴格模式。如果您將此列設為函式的第一列,則只有該函式會處於嚴格模式。
使用指令開啟嚴格模式並不是很友善,而且也是 ES5 中嚴格模式不如預期普及的原因之一。然而,ES6 模組和類別會隱含處於嚴格模式。由於大部分的 ES6 程式碼都會存在於模組中,因此嚴格模式會成為 ES6 的實際預設值。
通訊協定一詞在運算中具有各種意義。在程式語言和 API 設計的脈絡中,我使用它如下
通訊協定定義介面(方法和/或函式的簽章)和使用它們的規則。
其概念是指定如何執行服務。然後,任何人都可以執行服務,任何人都可以要求服務,而且保證它們可以順利地一起運作。
請注意,這裡提供的定義不同於將通訊協定視為介面(例如,Objective C 所做的),因為此定義包含規則。
給定方法呼叫 obj.m(···)
,obj
是方法呼叫的接收者,而且可以在方法內透過 this
存取。
函式的 (類型) 簽章描述函式如何呼叫、輸入和輸出為何。我在這本書中使用 Microsoft TypeScript 和 Facebook Flow 建立的語法。簽章範例
parseInt
(
string
:
string
,
radix
?
:
number
)
:
number
您會看到 parseInt()
預期字串和數字,並傳回數字。如果參數的類型很清楚,我通常會省略類型註解。
ES6 語言規範使用內部插槽來儲存內部資料。在規範中,內部插槽的存取方式就像它們是名稱在方括號中的屬性
O
.[[
GetPrototypeOf
]]()
兩件事使它們與屬性不同
[[Prototype]]
。該插槽的值無法透過 JavaScript 直接讀取,但您可以使用 Object.getPrototypeOf()
來執行此動作。內部插槽的儲存方式並未明確說明。有些甚至可能不存在於實際的 JavaScript 實作中。
ECMAScript 規範使用稱為環境的資料結構來儲存範圍的變數。環境基本上是一個將變數名稱對應到值的字典。繫結是環境中的條目,變數的儲存空間。
破壞性操作(方法、函式)會修改其參數或接收器。例如,push()
會修改其接收器 arr
> const arr = ['a', 'b'];
> arr.push('c')
3
> arr
[ 'a', 'b', 'c' ]
相反地,concat()
會建立新的陣列,而不會變更其接收器 arr
> const arr = ['a', 'b'];
> arr.concat(['c'])
[ 'a', 'b', 'c' ]
> arr
[ 'a', 'b' ]
類別 C
的 API 通常會以下列方式文件化
C
建構函式C
方法C.prototype
方法在英文中,我將 JavaScript 術語大寫如下
String
:其成員是物件,String
的執行個體。string
:其成員是基本值,字串。map()
區分。GitHub 上有幾個儲存庫包含本書中顯示的程式碼
async-examples
babel-on-node
demo_promise
generator-examples
node-es6-demo
promise-examples
webpack-es6-demo
側邊欄是標有圖示的文字方塊。它們補充了正常內容。
偶爾,我會透過腳註參照(公開的)外部資料。兩個來源標示在方括號中的前綴