1.MCMAScript和JavaScript的關(guān)系
一個(gè)常見的問題是,ECMAScript和JavaScript到底是什么關(guān)系?
要講清楚這個(gè)問題,需要回顧歷史。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è)詞是可以互換的。
2.ES6與ECMAScript 2015的關(guān)系
媒體里面經(jīng)??梢钥吹健盓CMAScript 2015“這個(gè)詞,它與ES6是什么關(guān)系呢?
2011年,ECMAScript 5.1版發(fā)布后,就開始制定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語言”。