ECMAScript 6.0(以下簡稱 ES6
)是 JavaScript 語言的下一代標(biāo)準(zhǔn),已經(jīng)在 2015 年 6 月正式發(fā)布了。它的目標(biāo),是使得 JavaScript 語言可以用來編寫復(fù)雜的大型應(yīng)用程序,成為企業(yè)級(jí)開發(fā)語言。
要講清 ECMAScript
和 JavaScript
之間的關(guān)系,就需要回顧歷史。1996 年 11 月,JavaScript 的創(chuàng)造者 Netscape
公司,決定將 JavaScript 提交給標(biāo)準(zhǔn)化組織 ECMA
,希望這種語言能夠成為國際標(biāo)準(zhǔn)。次年,ECMA 發(fā)布 262 號(hào)標(biāo)準(zhǔn)文件(ECMA-262)的第一版,規(guī)定了瀏覽器腳本語言的標(biāo)準(zhǔn),并將這種語言稱為 ECMAScript,這個(gè)版本就是 1.0 版。
該標(biāo)準(zhǔn)從一開始就是針對(duì) JavaScript 語言制定的,但是之所以不叫 JavaScript,有兩個(gè)原因。一是商標(biāo),Java 是 Sun 公司的商標(biāo),根據(jù)授權(quán)協(xié)議,只有 Netscape 公司可以合法地使用 JavaScript 這個(gè)名字,且 JavaScript 本身也已經(jīng)被 Netscape 公司注冊(cè)為商標(biāo)。二是想體現(xiàn)這門語言的制定者是 ECMA
,不是 Netscape,這樣有利于保證這門語言的開放性和中立性。
因此,ECMAScript 和 JavaScript 的關(guān)系是,前者是后者的規(guī)格
,后者是前者的一種實(shí)現(xiàn)
(另外的 ECMAScript 方言還有 JScript 和 ActionScript)。日常場合,這兩個(gè)詞是可以互換的。
ECMAScript 2015(簡稱 ES2015
),在2011年,發(fā)布了ECMAScript 5.1 版本,之后就開始制定 6.0 版了。因此,ES6 這個(gè)詞的原意,就是指 JavaScript 語言的下一個(gè)版本。
但是,因?yàn)檫@個(gè)版本引入的語法功能太多,而且制定過程當(dāng)中,還有很多組織和個(gè)人不斷提交新功能。事情很快就變得清楚了,不可能在一個(gè)版本里面包括所有將要引入的功能。常規(guī)的做法是先發(fā)布 6.0 版,過一段時(shí)間再發(fā) 6.1 版,然后是 6.2 版、6.3 版等等。
但是,標(biāo)準(zhǔn)的制定者不想這樣做。他們想讓標(biāo)準(zhǔn)的升級(jí)成為常規(guī)流程:任何人在任何時(shí)候,都可以向標(biāo)準(zhǔn)委員會(huì)提交新語法的提案,然后標(biāo)準(zhǔn)委員會(huì)每個(gè)月開一次會(huì),評(píng)估這些提案是否可以接受,需要哪些改進(jìn)。如果經(jīng)過多次會(huì)議以后,一個(gè)提案足夠成熟了,就可以正式進(jìn)入標(biāo)準(zhǔn)了。這就是說,標(biāo)準(zhǔn)的版本升級(jí)成為了一個(gè)不斷滾動(dòng)的流程,每個(gè)月都會(huì)有變動(dòng)。
標(biāo)準(zhǔn)委員會(huì)最終決定,標(biāo)準(zhǔn)在每年的 6月份
正式發(fā)布一次,作為當(dāng)年的正式版本。接下來的時(shí)間,就在這個(gè)版本的基礎(chǔ)上做改動(dòng),直到下一年的 6 月份,草案就自然變成了新一年的版本。這樣一來,就不需要以前的版本號(hào)了,只要用年份標(biāo)記就可以了。
ES6 的第一個(gè)
版本,就這樣在 2015 年 6 月發(fā)布了,正式名稱就是《ECMAScript 2015 標(biāo)準(zhǔn)》(簡稱 ES2015)。2016 年 6 月,小幅修訂的《ECMAScript 2016 標(biāo)準(zhǔn)》(簡稱 ES2016)如期發(fā)布,這個(gè)版本可以看作是 ES6.1 版,因?yàn)閮烧叩牟町惙浅P。ㄖ恍略隽藬?shù)組實(shí)例的includes方法和指數(shù)運(yùn)算符),基本上是同一個(gè)標(biāo)準(zhǔn)。根據(jù)計(jì)劃,2017 年 6 月發(fā)布 ES2017 標(biāo)準(zhǔn)。
因此,ES6 既是一個(gè)歷史名詞,也是一個(gè)泛指,含義是 5.1 版以后的 JavaScript 的下一代標(biāo)準(zhǔn),涵蓋了 ES2015、ES2016、ES2017 等等,而 ES2015
則是正式名稱
,特指該年發(fā)布的正式版本的語言標(biāo)準(zhǔn)。本書中提到 ES6 的地方,一般是指 ES2015 標(biāo)準(zhǔn),但有時(shí)也是泛指“下一代 JavaScript 語言”。
任何人都可以向標(biāo)準(zhǔn)委員會(huì)(又稱 TC39 委員會(huì))提案,要求修改語言標(biāo)準(zhǔn)。
一種新的語法從提案到變成正式標(biāo)準(zhǔn),需要經(jīng)歷五個(gè)階段。每個(gè)階段的變動(dòng)都需要由 TC39 委員會(huì)批準(zhǔn)。
-Stage 4 - Finished(定案階段)
一個(gè)提案只要能進(jìn)入 Stage 2
,就差不多肯定會(huì)包括在以后的正式標(biāo)準(zhǔn)里面。
ES6 從開始制定到最后發(fā)布,整整用了15 年
。
前面提到,ECMAScript 1.0 是 1997 年發(fā)布的,接下來的兩年,連續(xù)發(fā)布了 ECMAScript 2.0(1998 年 6 月)和 ECMAScript 3.0(1999 年 12 月)。3.0 版是一個(gè)巨大的成功,在業(yè)界得到廣泛支持,成為通行標(biāo)準(zhǔn),奠定了 JavaScript 語言的基本語法,以后的版本完全繼承。直到今天,初學(xué)者一開始學(xué)習(xí) JavaScript,其實(shí)就是在學(xué) 3.0 版的語法。
2000 年,ECMAScript 4.0 開始醞釀。這個(gè)版本最后沒有通過,但是它的大部分內(nèi)容被 ES6 繼承了。因此,ES6 制定的起點(diǎn)其實(shí)是 2000 年。
為什么 ES4 沒有通過呢?因?yàn)檫@個(gè)版本太激進(jìn)了,對(duì) ES3 做了徹底升級(jí),導(dǎo)致標(biāo)準(zhǔn)委員會(huì)的一些成員不愿意接受。ECMA 的第 39 號(hào)技術(shù)專家委員會(huì)(Technical Committee 39,簡稱 TC39)負(fù)責(zé)制訂 ECMAScript 標(biāo)準(zhǔn),成員包括 Microsoft、Mozilla、Google 等大公司。
2007 年 10 月,ECMAScript 4.0 版草案發(fā)布,本來預(yù)計(jì)次年 8 月發(fā)布正式版本。但是,各方對(duì)于是否通過這個(gè)標(biāo)準(zhǔn),發(fā)生了嚴(yán)重分歧。以 Yahoo、Microsoft、Google 為首的大公司,反對(duì) JavaScript 的大幅升級(jí),主張小幅改動(dòng);以 JavaScript 創(chuàng)造者 Brendan Eich 為首的 Mozilla 公司,則堅(jiān)持當(dāng)前的草案。
2008 年 7 月,由于對(duì)于下一個(gè)版本應(yīng)該包括哪些功能,各方分歧太大,爭論過于激烈,ECMA 開會(huì)決定,中止 ECMAScript 4.0 的開發(fā),將其中涉及現(xiàn)有功能改善的一小部分,發(fā)布為 ECMAScript 3.1,而將其他激進(jìn)的設(shè)想擴(kuò)大范圍,放入以后的版本,由于會(huì)議的氣氛,該版本的項(xiàng)目代號(hào)起名為 Harmony(和諧)。會(huì)后不久,ECMAScript 3.1 就改名為 ECMAScript 5。
2009 年 12 月,ECMAScript 5.0 版正式發(fā)布。Harmony 項(xiàng)目則一分為二,一些較為可行的設(shè)想定名為 JavaScript.next 繼續(xù)開發(fā),后來演變成 ECMAScript 6;一些不是很成熟的設(shè)想,則被視為 JavaScript.next.next,在更遠(yuǎn)的將來再考慮推出。TC39 委員會(huì)的總體考慮是,ES5 與 ES3 基本保持兼容,較大的語法修正和新功能加入,將由 JavaScript.next 完成。當(dāng)時(shí),JavaScript.next 指的是 ES6,第六版發(fā)布以后,就指 ES7。TC39 的判斷是,ES5 會(huì)在 2013 年的年中成為 JavaScript 開發(fā)的主流標(biāo)準(zhǔn),并在此后五年中一直保持這個(gè)位置。
2011 年 6 月,ECMAScript 5.1 版發(fā)布,并且成為 ISO 國際標(biāo)準(zhǔn)(ISO/IEC 16262:2011)。
2013 年 3 月,ECMAScript 6 草案凍結(jié),不再添加新功能。新的功能設(shè)想將被放到 ECMAScript 7。
2013 年 12 月,ECMAScript 6 草案發(fā)布。然后是 12 個(gè)月的討論期,聽取各方反饋。
2015 年 6 月,ECMAScript 6 正式通過,成為國際標(biāo)準(zhǔn)。從 2000 年算起,這時(shí)已經(jīng)過去了 15 年。
更多建議: