1. 關於 ECMAScript 6 (ES6)
目錄
請支持這本書:購買(PDF、EPUB、MOBI)捐款
(廣告,請不要封鎖。)

1. 關於 ECMAScript 6 (ES6)



歷經漫長的時間,JavaScript 的下一個版本 ECMAScript 6 終於問世了

以下章節將說明 ES6 世界中重要的概念。

1.1 TC39(Ecma 技術委員會 39)

TC39(Ecma 技術委員會 39) 是負責 JavaScript 演進的委員會。其成員為公司(包括所有主要的瀏覽器供應商)。TC39 定期開會,與會者包括成員派出的代表和受邀專家。會議記錄可在網路上取得,讓您深入了解 TC39 的運作方式。

1.2 ECMAScript 6 的設計方式

ECMAScript 6 的設計流程以功能的提案為中心。提案通常是由開發人員社群的建議所觸發。為避免由委員會設計,提案由擁護者(1-2 位委員會代表)維護。

提案在成為標準之前會經歷以下步驟

[本節的來源:「The Harmony Process」由 David Herman 所著。]

1.2.1 ES6 之後的設計流程

從 ECMAScript 2016 (ES7) 開始,TC39 將會對版本進行時間限制。ECMAScript 的新版本將會在每年發布,其中包含當時準備好的任何功能。這表示從現在開始,ECMAScript 版本將會是相對較小的升級。有關新流程的更多資訊,包括已完成和即將推出的功能提案,請參閱 GitHub 儲存庫 ecma262

1.3 JavaScript 與 ECMAScript

JavaScript 是每個人對這門語言的稱呼,但這個名稱是商標(由 Oracle 所擁有,Oracle 從 Sun 繼承了這個商標)。因此,JavaScript 的官方名稱是ECMAScript。這個名稱來自管理語言標準的標準組織 Ecma。自 ECMAScript 成立以來,組織的名稱已從縮寫「ECMA」變更為正式名稱「Ecma」。

JavaScript 的版本由規格定義,其中包含語言的官方名稱。因此,JavaScript 的第一個標準版本是 ECMAScript 1,簡稱「ECMAScript 語言規格,第 1 版」。ECMAScript x 通常縮寫為 ESx。

1.4 升級到 ES6

網路上的利害關係人包括

這些群組彼此之間的控制權極低。這正是升級網路語言如此困難的原因。

一方面,升級引擎很困難,因為它們必須面對網路上的各種程式碼,其中有些非常舊。您也希望引擎升級對使用者來說是自動且不引人注目的。因此,ES6 是 ES5 的超集,沒有任何移除的內容1。ES6 升級了語言,而沒有引入版本或模式。它甚至設法透過模組將嚴格模式設為實際上的預設值,而不會增加它與隨意模式之間的差距。所採取的方法稱為「單一 JavaScript」,並在 單一章節 中進行說明。

另一方面,升級程式碼很困難,因為您的程式碼必須在目標受眾使用的所有 JavaScript 引擎上執行。因此,如果您想在程式碼中使用 ES6,您只有兩個選擇:您可以等到目標受眾中沒有人再使用非 ES6 引擎。這將需要數年的時間;當 ES6 在 2015 年 6 月成為標準時,主流受眾對 ES5 的態度就是如此。而 ES5 是在 2009 年 12 月標準化的!或者,您可以將 ES6 編譯成 ES5,並立即使用它。有關如何執行此操作的更多資訊,請參閱免費線上閱讀的書籍「設定 ES6」。

ES6 的設計中,目標和需求相互衝突

1.5 ES6 的目標

Harmony/ES6 的原始專案頁面 提到了幾個目標。在下列小節中,我將探討其中一些目標。

1.5.1 目標:成為更好的語言

目標是:成為撰寫

  1. 複雜應用程式的更好語言;
  2. 由這些應用程式共用的函式庫(可能包括 DOM);
  3. 針對新版本編寫的程式碼產生器。

次要目標 (i) 承認以 JavaScript 編寫的應用程式已大幅成長。ES6 的一個關鍵功能內建模組,可滿足此目標。

模組也是目標 (ii) 的解答。順帶一提,DOM 在 JavaScript 中出了名的難以實作。ES6 代理 應有助於解決此問題。

加入多項功能,主要是為了讓編譯成 JavaScript 更容易。兩個範例為

它們都對透過 Emscripten 將 C/C++ 編譯成 JavaScript 有用。

1.5.2 目標:改善互操作性

目標是:改善互操作性,在可能的情況下採用事實標準。

範例為

1.5.3 目標:版本控制

目標是:讓版本控制盡可能簡單且線性。

如前所述,ES6 透過「單一 JavaScript」避免版本控制:在 ES6 程式碼庫中,所有內容都是 ES6,沒有特定於 ES5 的部分。

1.6 ES6 功能的類別

ES6 規格的簡介列出所有新功能

[ECMAScript 6] 的一些主要強化功能包括模組、類別宣告、詞彙區塊範圍、反覆運算器和產生器、非同步程式設計的承諾、解構模式,以及適當的尾端呼叫。ECMAScript 內建函式庫已擴充,以支援額外的資料抽象,包括映射、集合,以及二進位數字值陣列,以及在字串和正規表示式中額外支援 Unicode 補充字元。內建函式現在可透過子類別化進行擴充。

功能有三大類別

1.7 ECMAScript 的簡史

本節說明 ECMAScript 6 的發展歷程。

1.7.1 早期:ECMAScript 1–3

1.7.2 ECMAScript 4(2008 年 7 月放棄)

ES4 的開發始於 1999 年 ES3 發布之後。2003 年,發布了一份中期報告,之後 ES4 的開發暫停。Adobe(在 ActionScript 中)和 Microsoft(在 JScript.NET 中)實作了中期報告中所述語言的子集。

2005 年 2 月,Jesse James Garrett 觀察到,結合多種技術已成為在 JavaScript 中實作動態前端應用程式的熱門做法。他將這些技術稱為 Ajax。Ajax 讓全新的網路應用程式類別成為可能,並引發了對 JavaScript 的熱烈興趣。

這可能是促成 TC39 在 2005 年秋季恢復 ES4 開發的原因。他們以 ES3、ES4 中期報告以及 ActionScript 和 JScript.NET 的經驗為基礎來開發 ES4。

現在有兩個小組在開發未來的 ECMAScript 版本

這兩個團體對於 JavaScript 的未來意見分歧,而他們之間的緊張關係持續升高。

1.7.3 ECMAScript Harmony

2008 年 7 月底,TC39 在奧斯陸舉行了一場會議,其結果由 Brendan Eich 描述如下:

JavaScript 標準制定機構,Ecma 技術委員會 39 分裂已超過一年,這已不是秘密,有些成員支持 ES4 […] 而其他人則支持 ES3.1 […]. 現在,我很高興地報告,分裂已經結束。

會議中達成的協議包含四個重點

  1. 開發 ECMAScript 的增量更新(成為 ECMAScript 5)。
  2. 開發一個重大的新版本,其規模應比 ECMAScript 4 適中,但比 ECMAScript 3 之後的版本大得多。這個版本由於構思會議的性質,代號為Harmony
  3. 將從 ECMAScript 4 中刪除的功能:套件、命名空間、早期繫結。
  4. 其他構想將在 TC39 全體達成共識後開發。

因此:ES4 團體同意讓 Harmony 比 ES4 不那麼激進,TC39 的其他成員同意繼續推進。

ECMAScript 的後續版本為

下一篇:2. 常見問題:ECMAScript 6