什么是ECMAScript(來龍去脈娓娓道來)?
作者:馮天然
鏈接:https://zhuanlan.zhihu.com/p/22557749
來源:知乎
什么是ECMAScript
首先既然要更好的了解,起碼得先說說什么是 ECMAScript。
ECMAScript 是一種由 ECMA國際(前身為歐洲計算機制造商協會)通過 ECMA-262 標準化的腳本程序設計語言。
看起來出現了很多奇怪的名詞,ECMA國際?ECMA-262?黑人問號???
那么然后來稍微介紹一下什么是 ECMA國際。
ECMA國際
Ecma國際(Ecma International)是一家國際性會員制度的信息和電信標準組織。1994年之前,名為歐洲計算機制造商協會(European Computer Manufacturers Association)。因為計算機的國際化,組織的標準牽涉到很多其他國家,因此組織決定改名表明其國際性?,F名稱已不屬于首字母縮略字。
與國家政府標準機構不同,Ecma國際是企業會員制的組織。組織的標準化過程比較商業化,自稱這種營運方式減少官僚追求效果。
上面這些信息都可以在 WIKI 中找到。大家可以很明確的看到,Ecma國際是一家和企業密切相連的組織,所以 Ecma國際制定的規范都是由各類企業來做主要的制定和推廣。
那么既然說到了 Ecma國際,那么它都做了些什么事呢?
其實 Ecma國際負責了很多標準的制定,比如有如下這些規范。大家可以看到這里面有我們今天的主角,ECMAScript 規范。
CD-ROM格式(之后被國際標準化組織批準為ISO 9660)
C#語言規范
C++/CLI語言規范
通用語言架構(CLI)
ECMAScript語言規范(JavaScript)
Eiffel語言
電子產品環境化設計要素
Universal 3D標準
OOXML
Dart語言規范
JAVASCRIPT的誕生
在說 ECMA262 之前,我們先來講講 javascript 的歷史。
在1994年,Netscape 發布了 Navigator0.9,但是因為那個時候的瀏覽器缺乏和用戶有良好交互的能力。所以 Netscape 急切渴望一門可以在瀏覽器中運行,可以提供一定用戶交互的語言。
然后在1995年,Netscape 讓 Brendan Eich 去開發這門語言。然而,javascript 誕生了。
然而在此之后,Microsoft 推出了一門類似的語言,JScript。
Netscape 為了提升 javascript 的競爭力,于是將 javascript 提供給 ECMA組織 進行標準化。
然后,1997年7月,ECMA262 標準出臺。
時隔14年之后,ECMA-262 標準也被另一個國際標準化組織 ISO(International Organization for Standardization)在2011年6月批準,標準號是 ISO-16262。
ECMAScript 作為一門腳本程序設計語言標準,并不只有 javascript 這一種實現,它也有很多的方言實現。比如有下面這些語言:
JavaScript
Ejscript
JScript .NET
ActionScript
DMDScript
CriScript
InScript
飛速發展和穩定期
在 ECMAScript 規范初版發布后不久。
1998年6月,ECMAScript 2.0 發布。
1999年12月,ECMAScript 3.0 發布。
這時,ECMAScript 規范本身也相對比較完善和穩定了,但是接下來的事情,就比較悲劇了。
2007年10月。。。。ECMAScript 4.0 草案發布。
這次的新規范,歷時頗久,規范的新內容也有了很多爭議。
在制定ES4的時候,是分成了兩個工作組同時工作的。
一邊是以 Adobe, Mozilla, Opera 和 Google為主的 ECMAScript 4 工作組。
一邊是以 Microsoft 和 Yahoo 為主的 ECMAScript 3.1 工作組。
ECMAScript 4 的很多主張比較激進,改動較大。而 ECMAScript 3.1 則主張小幅更新。
最終經過 TC39 的會議,決定將一部分不那么激進的改動保留發布為 ECMAScript 3.1,然后將一部分比較激進的部分放置到 ES.NEXT 中,命名為 Harmony(和諧),留待以后再進行商榷。接下來,ECMAScript? 3.1 變成了 ECMAScript 5,而 ES.NEXT 中的那些特性,則有著相當一部分被ECMAScript 6,也就是 ECMAScript 2015 所吸收了。所以說雖然 ECMAScript 4 被廢棄了,但是它終究還是通過另一種方式活了下來。
然后,2009年12月,ECMAScript 5 發布。
2011年6月,ECMAScript 5.1 發布。
TC39
中間插個小話題。其實在前面大家仔細看,會發現有個名詞,TC39。為了接下來的內容,所以先來解釋一下 TC39 是什么。
TC(Technical Committees)
TG(Task Groups)
在ECMA國際,每個標準都會有一個 TC 來負責,而一個 TC 中可能會有不同的 TG 來負責不同的工作。而負責 ECMA262,也就是我們所說的 ECMAScript 的就是 TC39(以前叫 TC39-TG1)。
Ecma organisation在這里我們可以看到各個 TC,并且可以查看其負責的標準。
ECMAScript 2015
接下來是一部重頭戲。
2015年6月,ECMAScript 6,也就是 ECMAScript 2015 發布了。
新的規范中,帶有大量 ECMAScript 4 中激進特性,以及常年的提案積累。所以 ECMAScript 6 里和前一版標準有了非常大的差別。
從 ECMAScript 6 開始,標準有了新的,更加規范化和快速的制定流程。面對著每年一次的,頻繁的標準更替,再采用1234的版本號來標注規范顯得不太合適。所以從 ECMAScript 6 開始,就開始采用年號來做版本。即 ECMAScript 2015。
新的規范制定流程
在新的規范制定流程中,要求成文標準要從事實標準中誕生,實現先于標準存在,大家可以在接下來的流程說明中看出來。
每個新特性,從開始到完成一共要經歷5個階段。
strawman (稻草人)階段
任何人都可以提交pull request到GitHub - tc39/ecma262: Status, process, and documents for ECMA262
可以是一個提議,想法,初步描述
proposal(提案)階段
TC39制定成員作為 champion
TC39審閱通過
有實現的 Demo 或者 Polyfill
初步描寫標準的語義語法算法復雜度解決的問題等
Draft(草案)階段
有兩個或兩個以上的實現(包括babel這類的轉譯實現)
使用正式的語言描述該語法,api等
candidate(候選)階段
至少2個實現,可以為實驗性實現
ECMAScript spec editor 通過審核
TC39 review 通過
文本編寫完成
Finished(完成)階段
編寫 test 262 測試用例
通過兩個實現該特性的內核測試
ECMAScript spec editor 通過審核
開發者表示支持和認可
接下來,在每年的3月和9月,都會提交新特性的申請,在 ECMA General Assembly 通過以后,被添加到標準中去。
值得注意的是,TC39 每年的工作日程也是規劃好了的。
每年的3月,TC39 會召開會議,將完成的特性添加到標準中。
每年的4月到6月,會由 ECMA CC 和 ECMA CG 來做 Review。
每年的7月,批準通過新標準并且發布。所以,ECMAScript 2016 標準,其實也已經正式發布了,雖然只新增了兩個特性。我們現在已經可以開始看 ECMAScript 2017 的草案了。
迷茫的新特性
對于有些人來說,前端的更新總是很突兀,很讓人迷茫。
但是其實不是的。變化總是一點一點發生的。
GitHub - tc39/proposals: Tracking ECMAScript Proposals
我們可以在 TC39 的 Github 倉庫中找到完成了,廢棄的,以及正在進行中的提案。
多去關注這些東西,對于很多新事物的到來,我們也就不會有多驚訝了。
別的 ECMA 標準?
和 ECMAScript 有關的標準只有 ECMA262 嗎?
其實不是。和 ECMAScript 有關的標準有 ECMA262,ECMA290,ECMA327,ECMA357,ECMA402,ECMA404,ECMA414等等。
其中290,327,357等等沒有推廣開來,被廢棄。
ECMA 262 是語言規范本身。
ECMA 402 則是制定一些基于 ECMAScript 5 或者之后版本的一些國際化 API 標準。
ECMA 404 是 JSON 規范。
ECMA 414 則規定了哪些規范是和 ECMAScript 有關的。目前內部就包含了 262,402和404。
備注
如果大家想更好的關注標準的變化,可以訂閱 TC39 的郵件組,關注 TC39 的 Github,并且在 Twitter 上關注 TC39 的成員。
引用
John Resig -? ECMAScript Harmony