本章回答有關 ECMAScript 6 的幾個常見問題。
ES6 大部分已在目前的引擎中獲得支援,請參閱 Kangax 的 ES6 相容性表格 以找出哪些地方支援。
對於其他選項(例如互動式 ES6 命令列和透過 Babel 將 ES6 轉譯為 ES5),請參閱「設定 ES6」中的「部署 ECMAScript 6」一章。
是也不是。官方名稱為 ECMAScript 2015,但 ES6 是眾所周知且使用的名稱。這就是我決定在這本書中使用後者的原因。
在 ES6 之後,ECMAScript 版本是透過 新流程 和每年的發布週期建立的。這似乎是轉換到新命名方式的好時機。因此,我將使用「ECMAScript 2016」作為 ES6 之後版本的版本名稱。
無需執行任何操作:ECMAScript 6 是 ECMAScript 5 的超集。因此,您的所有 ES5 程式碼會自動成為 ES6 程式碼。這有助於逐步採用這個新版本。ES6 如何完全保持向後相容性,在「一個 JavaScript」一章中有說明。
ES6 在各處都獲得越來越好的支援。這是否表示您不應該再學習 ECMAScript 5 了?並非如此,原因有幾個
偶爾會看到有人指控 ES6 過於龐大,而且引入了太多無用的語法糖(對已經存在的事物提供更方便的語法)。
然而,在許多方面,JavaScript 現在才趕上 Python 和 Ruby 等語言。這兩種語言仍然有更多功能,而且附帶更豐富的標準函式庫。
如果有人抱怨 ES6 太大,我建議他們試用一段時間。沒有人強迫你使用任何新功能。你可以從小處開始(參閱章節「ES6 核心功能」的建議),然後隨著你對 ES6 愈來愈熟悉,再使用更多新功能。到目前為止,我從實際使用 ES6 程式設計的人(相對於只讀過相關資料的人)得到的回饋都是壓倒性地正面的。
此外,表面上看起來像語法糖的事物(例如類別和模組)為這門語言帶來了急需的標準化,並作為未來功能的基礎。
最後,有幾個功能不是為一般程式設計師建立的,而是為函式庫作者建立的(例如產生器、迭代器、代理)。「一般程式設計師」如果知道這些功能,只要知道表面上的東西就好。
ECMAScript 規格確實大幅成長:ECMAScript 5.1 的 PDF 有 245 頁,ES6 的 PDF 有 593 頁。但是,相較之下,Java 8 語言規格有 724 頁(不含索引)。此外,ES6 規格包含許多其他語言規格省略的細節,因為這些細節是實作定義的。它也說明了其標準函式庫如何運作2。
ES6 原本要有陣列和產生器推導式(類似 Haskell 和 Python)。但是它們沒有被加入,因為 TC39 想探索兩個途徑
靜態類型並非 ES6 的一部分。然而,以下兩種技術會將靜態類型加入 JavaScript。類似的功能最終可能會標準化。
靜態類型的兩個好處是
TypeScript 和 Flow 都使用相同的符號。類型註解是可選擇的,這讓這種方法相對輕量。即使沒有註解,通常也可以推論出類型。因此,這種類型檢查甚至對完全沒有註解的程式碼也很有用,作為一致性檢查。