寫在前面
本文集主要總結(jié)歸納了一些ES6的基本語(yǔ)法,主要引用了阮一峰老師的《ECMAScript 6 標(biāo)準(zhǔn)入門》一書。
簡(jiǎn)介
1.ES6是什么鬼?
ECMAScript 6.0(以下簡(jiǎn)稱 ES6)是 JavaScript 語(yǔ)言的下一代標(biāo)準(zhǔn),已經(jīng)在 2015 年 6 月正式發(fā)布了。它的目標(biāo),是使得 JavaScript 語(yǔ)言可以用來編寫復(fù)雜的大型應(yīng)用程序,成為企業(yè)級(jí)開發(fā)語(yǔ)言。
2.ECMAScript 和 JavaScript 的關(guān)系
一個(gè)常見的問題是,ECMAScript 和 JavaScript 到底是什么關(guān)系?
要講清楚這個(gè)問題,需要回顧歷史。1996 年 11 月,JavaScript 的創(chuàng)造者 Netscape 公司,決定將 JavaScript 提交給標(biāo)準(zhǔn)化組織 ECMA,希望這種語(yǔ)言能夠成為國(guó)際標(biāo)準(zhǔn)。次年,ECMA 發(fā)布 262 號(hào)標(biāo)準(zhǔn)文件(ECMA-262)的第一版,規(guī)定了瀏覽器腳本語(yǔ)言的標(biāo)準(zhǔn),并將這種語(yǔ)言稱為 ECMAScript,這個(gè)版本就是 1.0 版。
該標(biāo)準(zhǔn)從一開始就是針對(duì) JavaScript 語(yǔ)言制定的,但是之所以不叫 JavaScript,有兩個(gè)原因。一是商標(biāo),Java 是 Sun 公司的商標(biāo),根據(jù)授權(quán)協(xié)議,只有 Netscape 公司可以合法地使用 JavaScript 這個(gè)名字,且 JavaScript 本身也已經(jīng)被 Netscape 公司注冊(cè)為商標(biāo)。二是想體現(xiàn)這門語(yǔ)言的制定者是 ECMA,不是 Netscape,這樣有利于保證這門語(yǔ)言的開放性和中立性。
因此,ECMAScript 和 JavaScript 的關(guān)系是,前者是后者的規(guī)格,后者是前者的一種實(shí)現(xiàn)(另外的 ECMAScript 方言還有 JScript 和 ActionScript)。日常場(chǎng)合,這兩個(gè)詞是可以互換的。
3.ECMAScript 的歷史
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 語(yǔ)言的基本語(yǔ)法,以后的版本完全繼承。直到今天,初學(xué)者一開始學(xué)習(xí) JavaScript,其實(shí)就是在學(xué) 3.0 版的語(yǔ)法。
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,簡(jiǎn)稱 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)該包括哪些功能,各方分歧太大,爭(zhē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 基本保持兼容,較大的語(yǔ)法修正和新功能加入,將由 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 國(guó)際標(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 正式通過,成為國(guó)際標(biāo)準(zhǔn)。從 2000 年算起,這時(shí)已經(jīng)過去了 15 年。