什么是ECMAScript(來龍去脈娓娓道來)?
作者:馮天然
鏈接:https://zhuanlan.zhihu.com/p/22557749
來源:知乎
什么是ECMAScript
首先既然要更好的了解敢艰,起碼得先說說什么是 ECMAScript胚泌。
ECMAScript 是一種由 ECMA國際(前身為歐洲計(jì)算機(jī)制造商協(xié)會)通過 ECMA-262 標(biāo)準(zhǔn)化的腳本程序設(shè)計(jì)語言赫蛇。
看起來出現(xiàn)了很多奇怪的名詞阀捅,ECMA國際训挡?ECMA-262?黑人問號青伤?潦牛??
那么然后來稍微介紹一下什么是 ECMA國際健盒。
ECMA國際
Ecma國際(Ecma International)是一家國際性會員制度的信息和電信標(biāo)準(zhǔn)組織绒瘦。1994年之前,名為歐洲計(jì)算機(jī)制造商協(xié)會(European Computer Manufacturers Association)扣癣。因?yàn)橛?jì)算機(jī)的國際化惰帽,組織的標(biāo)準(zhǔn)牽涉到很多其他國家,因此組織決定改名表明其國際性〔現(xiàn)名稱已不屬于首字母縮略字善茎。
與國家政府標(biāo)準(zhǔn)機(jī)構(gòu)不同,Ecma國際是企業(yè)會員制的組織频轿。組織的標(biāo)準(zhǔn)化過程比較商業(yè)化垂涯,自稱這種營運(yùn)方式減少官僚追求效果烁焙。
上面這些信息都可以在 WIKI 中找到。大家可以很明確的看到耕赘,Ecma國際是一家和企業(yè)密切相連的組織骄蝇,所以 Ecma國際制定的規(guī)范都是由各類企業(yè)來做主要的制定和推廣。
那么既然說到了 Ecma國際操骡,那么它都做了些什么事呢九火?
其實(shí) Ecma國際負(fù)責(zé)了很多標(biāo)準(zhǔn)的制定,比如有如下這些規(guī)范册招。大家可以看到這里面有我們今天的主角岔激,ECMAScript 規(guī)范。
CD-ROM格式(之后被國際標(biāo)準(zhǔn)化組織批準(zhǔn)為ISO 9660)
C#語言規(guī)范
C++/CLI語言規(guī)范
通用語言架構(gòu)(CLI)
ECMAScript語言規(guī)范(JavaScript)
Eiffel語言
電子產(chǎn)品環(huán)境化設(shè)計(jì)要素
Universal 3D標(biāo)準(zhǔn)
OOXML
Dart語言規(guī)范
JAVASCRIPT的誕生
在說 ECMA262 之前是掰,我們先來講講 javascript 的歷史虑鼎。
在1994年,Netscape 發(fā)布了 Navigator0.9键痛,但是因?yàn)槟莻€時候的瀏覽器缺乏和用戶有良好交互的能力炫彩。所以 Netscape 急切渴望一門可以在瀏覽器中運(yùn)行,可以提供一定用戶交互的語言絮短。
然后在1995年江兢,Netscape 讓 Brendan Eich 去開發(fā)這門語言。然而丁频,javascript 誕生了杉允。
然而在此之后,Microsoft 推出了一門類似的語言限府,JScript夺颤。
Netscape 為了提升 javascript 的競爭力,于是將 javascript 提供給 ECMA組織 進(jìn)行標(biāo)準(zhǔn)化胁勺。
然后,1997年7月独旷,ECMA262 標(biāo)準(zhǔn)出臺署穗。
時隔14年之后,ECMA-262 標(biāo)準(zhǔn)也被另一個國際標(biāo)準(zhǔn)化組織 ISO(International Organization for Standardization)在2011年6月批準(zhǔn)嵌洼,標(biāo)準(zhǔn)號是 ISO-16262案疲。
ECMAScript 作為一門腳本程序設(shè)計(jì)語言標(biāo)準(zhǔn),并不只有 javascript 這一種實(shí)現(xiàn)麻养,它也有很多的方言實(shí)現(xiàn)褐啡。比如有下面這些語言:
JavaScript
Ejscript
JScript .NET
ActionScript
DMDScript
CriScript
InScript
飛速發(fā)展和穩(wěn)定期
在 ECMAScript 規(guī)范初版發(fā)布后不久。
1998年6月鳖昌,ECMAScript 2.0 發(fā)布备畦。
1999年12月低飒,ECMAScript 3.0 發(fā)布。
這時懂盐,ECMAScript 規(guī)范本身也相對比較完善和穩(wěn)定了褥赊,但是接下來的事情,就比較悲劇了莉恼。
2007年10月拌喉。。俐银。尿背。ECMAScript 4.0 草案發(fā)布。
這次的新規(guī)范捶惜,歷時頗久田藐,規(guī)范的新內(nèi)容也有了很多爭議。
在制定ES4的時候售躁,是分成了兩個工作組同時工作的坞淮。
一邊是以 Adobe, Mozilla, Opera 和 Google為主的 ECMAScript 4 工作組。
一邊是以 Microsoft 和 Yahoo 為主的 ECMAScript 3.1 工作組陪捷。
ECMAScript 4 的很多主張比較激進(jìn)回窘,改動較大。而 ECMAScript 3.1 則主張小幅更新市袖。
最終經(jīng)過 TC39 的會議啡直,決定將一部分不那么激進(jìn)的改動保留發(fā)布為 ECMAScript 3.1,然后將一部分比較激進(jìn)的部分放置到 ES.NEXT 中苍碟,命名為 Harmony(和諧)酒觅,留待以后再進(jìn)行商榷。接下來微峰,ECMAScript? 3.1 變成了 ECMAScript 5舷丹,而 ES.NEXT 中的那些特性,則有著相當(dāng)一部分被ECMAScript 6蜓肆,也就是 ECMAScript 2015 所吸收了颜凯。所以說雖然 ECMAScript 4 被廢棄了,但是它終究還是通過另一種方式活了下來仗扬。
然后症概,2009年12月,ECMAScript 5 發(fā)布早芭。
2011年6月彼城,ECMAScript 5.1 發(fā)布。
TC39
中間插個小話題。其實(shí)在前面大家仔細(xì)看募壕,會發(fā)現(xiàn)有個名詞调炬,TC39。為了接下來的內(nèi)容司抱,所以先來解釋一下 TC39 是什么筐眷。
TC(Technical Committees)
TG(Task Groups)
在ECMA國際,每個標(biāo)準(zhǔn)都會有一個 TC 來負(fù)責(zé)习柠,而一個 TC 中可能會有不同的 TG 來負(fù)責(zé)不同的工作匀谣。而負(fù)責(zé) ECMA262,也就是我們所說的 ECMAScript 的就是 TC39(以前叫 TC39-TG1)资溃。
Ecma organisation在這里我們可以看到各個 TC武翎,并且可以查看其負(fù)責(zé)的標(biāo)準(zhǔn)。
ECMAScript 2015
接下來是一部重頭戲溶锭。
2015年6月宝恶,ECMAScript 6,也就是 ECMAScript 2015 發(fā)布了趴捅。
新的規(guī)范中垫毙,帶有大量 ECMAScript 4 中激進(jìn)特性,以及常年的提案積累拱绑。所以 ECMAScript 6 里和前一版標(biāo)準(zhǔn)有了非常大的差別综芥。
從 ECMAScript 6 開始,標(biāo)準(zhǔn)有了新的猎拨,更加規(guī)范化和快速的制定流程膀藐。面對著每年一次的,頻繁的標(biāo)準(zhǔn)更替红省,再采用1234的版本號來標(biāo)注規(guī)范顯得不太合適额各。所以從 ECMAScript 6 開始,就開始采用年號來做版本吧恃。即 ECMAScript 2015虾啦。
新的規(guī)范制定流程
在新的規(guī)范制定流程中,要求成文標(biāo)準(zhǔn)要從事實(shí)標(biāo)準(zhǔn)中誕生痕寓,實(shí)現(xiàn)先于標(biāo)準(zhǔn)存在缸逃,大家可以在接下來的流程說明中看出來。
每個新特性厂抽,從開始到完成一共要經(jīng)歷5個階段。
strawman (稻草人)階段
任何人都可以提交pull request到GitHub - tc39/ecma262: Status, process, and documents for ECMA262
可以是一個提議丁眼,想法筷凤,初步描述
proposal(提案)階段
TC39制定成員作為 champion
TC39審閱通過
有實(shí)現(xiàn)的 Demo 或者 Polyfill
初步描寫標(biāo)準(zhǔn)的語義語法算法復(fù)雜度解決的問題等
Draft(草案)階段
有兩個或兩個以上的實(shí)現(xiàn)(包括babel這類的轉(zhuǎn)譯實(shí)現(xiàn))
使用正式的語言描述該語法,api等
candidate(候選)階段
至少2個實(shí)現(xiàn),可以為實(shí)驗(yàn)性實(shí)現(xiàn)
ECMAScript spec editor 通過審核
TC39 review 通過
文本編寫完成
Finished(完成)階段
編寫 test 262 測試用例
通過兩個實(shí)現(xiàn)該特性的內(nèi)核測試
ECMAScript spec editor 通過審核
開發(fā)者表示支持和認(rèn)可
接下來藐守,在每年的3月和9月挪丢,都會提交新特性的申請,在 ECMA General Assembly 通過以后卢厂,被添加到標(biāo)準(zhǔn)中去乾蓬。
值得注意的是,TC39 每年的工作日程也是規(guī)劃好了的慎恒。
每年的3月任内,TC39 會召開會議,將完成的特性添加到標(biāo)準(zhǔn)中融柬。
每年的4月到6月死嗦,會由 ECMA CC 和 ECMA CG 來做 Review。
每年的7月粒氧,批準(zhǔn)通過新標(biāo)準(zhǔn)并且發(fā)布越除。所以,ECMAScript 2016 標(biāo)準(zhǔn)外盯,其實(shí)也已經(jīng)正式發(fā)布了摘盆,雖然只新增了兩個特性。我們現(xiàn)在已經(jīng)可以開始看 ECMAScript 2017 的草案了饱苟。
迷茫的新特性
對于有些人來說孩擂,前端的更新總是很突兀,很讓人迷茫掷空。
但是其實(shí)不是的肋殴。變化總是一點(diǎn)一點(diǎn)發(fā)生的。
GitHub - tc39/proposals: Tracking ECMAScript Proposals
我們可以在 TC39 的 Github 倉庫中找到完成了坦弟,廢棄的护锤,以及正在進(jìn)行中的提案。
多去關(guān)注這些東西酿傍,對于很多新事物的到來烙懦,我們也就不會有多驚訝了。
別的 ECMA 標(biāo)準(zhǔn)赤炒?
和 ECMAScript 有關(guān)的標(biāo)準(zhǔn)只有 ECMA262 嗎氯析?
其實(shí)不是。和 ECMAScript 有關(guān)的標(biāo)準(zhǔn)有 ECMA262莺褒,ECMA290掩缓,ECMA327,ECMA357遵岩,ECMA402你辣,ECMA404巡通,ECMA414等等。
其中290舍哄,327宴凉,357等等沒有推廣開來,被廢棄表悬。
ECMA 262 是語言規(guī)范本身弥锄。
ECMA 402 則是制定一些基于 ECMAScript 5 或者之后版本的一些國際化 API 標(biāo)準(zhǔn)。
ECMA 404 是 JSON 規(guī)范蟆沫。
ECMA 414 則規(guī)定了哪些規(guī)范是和 ECMAScript 有關(guān)的籽暇。目前內(nèi)部就包含了 262,402和404饥追。
備注
如果大家想更好的關(guān)注標(biāo)準(zhǔn)的變化图仓,可以訂閱 TC39 的郵件組,關(guān)注 TC39 的 Github但绕,并且在 Twitter 上關(guān)注 TC39 的成員救崔。
引用
John Resig -? ECMAScript Harmony