ES6 簡介

2020-06-10 18:31 更新

ES6 簡介

ECMAScript 6.0(以下簡稱 ES6)是 JavaScript 語言的下一代標(biāo)準,已經(jīng)在 2015 年 6 月正式發(fā)布了。它的目標(biāo),是使得 JavaScript 語言可以用來編寫復(fù)雜的大型應(yīng)用程序,成為企業(yè)級開發(fā)語言。

ECMAScript 和 JavaScript 的關(guān)系

要講清 ECMAScriptJavaScript 之間的關(guān)系,就需要回顧歷史。1996 年 11 月,JavaScript 的創(chuàng)造者 Netscape 公司,決定將 JavaScript 提交給標(biāo)準化組織 ECMA,希望這種語言能夠成為國際標(biāo)準。次年,ECMA 發(fā)布 262 號標(biāo)準文件(ECMA-262)的第一版,規(guī)定了瀏覽器腳本語言的標(biāo)準,并將這種語言稱為 ECMAScript,這個版本就是 1.0 版。

該標(biāo)準從一開始就是針對 JavaScript 語言制定的,但是之所以不叫 JavaScript,有兩個原因。一是商標(biāo),Java 是 Sun 公司的商標(biāo),根據(jù)授權(quán)協(xié)議,只有 Netscape 公司可以合法地使用 JavaScript 這個名字,且 JavaScript 本身也已經(jīng)被 Netscape 公司注冊為商標(biāo)。二是想體現(xiàn)這門語言的制定者是 ECMA,不是 Netscape,這樣有利于保證這門語言的開放性和中立性。

因此,ECMAScript 和 JavaScript 的關(guān)系是,前者是后者的規(guī)格,后者是前者的一種實現(xiàn)(另外的 ECMAScript 方言還有 JScript 和 ActionScript)。日常場合,這兩個詞是可以互換的。

ES6 與 ECMAScript 2015 之間的關(guān)系

ECMAScript 2015(簡稱 ES2015),在2011年,發(fā)布了ECMAScript 5.1 版本,之后就開始制定 6.0 版了。因此,ES6 這個詞的原意,就是指 JavaScript 語言的下一個版本。

但是,因為這個版本引入的語法功能太多,而且制定過程當(dāng)中,還有很多組織和個人不斷提交新功能。事情很快就變得清楚了,不可能在一個版本里面包括所有將要引入的功能。常規(guī)的做法是先發(fā)布 6.0 版,過一段時間再發(fā) 6.1 版,然后是 6.2 版、6.3 版等等。

但是,標(biāo)準的制定者不想這樣做。他們想讓標(biāo)準的升級成為常規(guī)流程:任何人在任何時候,都可以向標(biāo)準委員會提交新語法的提案,然后標(biāo)準委員會每個月開一次會,評估這些提案是否可以接受,需要哪些改進。如果經(jīng)過多次會議以后,一個提案足夠成熟了,就可以正式進入標(biāo)準了。這就是說,標(biāo)準的版本升級成為了一個不斷滾動的流程,每個月都會有變動。

標(biāo)準委員會最終決定,標(biāo)準在每年的 6月份正式發(fā)布一次,作為當(dāng)年的正式版本。接下來的時間,就在這個版本的基礎(chǔ)上做改動,直到下一年的 6 月份,草案就自然變成了新一年的版本。這樣一來,就不需要以前的版本號了,只要用年份標(biāo)記就可以了。

ES6 的第一個版本,就這樣在 2015 年 6 月發(fā)布了,正式名稱就是《ECMAScript 2015 標(biāo)準》(簡稱 ES2015)。2016 年 6 月,小幅修訂的《ECMAScript 2016 標(biāo)準》(簡稱 ES2016)如期發(fā)布,這個版本可以看作是 ES6.1 版,因為兩者的差異非常?。ㄖ恍略隽藬?shù)組實例的includes方法和指數(shù)運算符),基本上是同一個標(biāo)準。根據(jù)計劃,2017 年 6 月發(fā)布 ES2017 標(biāo)準。

因此,ES6 既是一個歷史名詞,也是一個泛指,含義是 5.1 版以后的 JavaScript 的下一代標(biāo)準,涵蓋了 ES2015、ES2016、ES2017 等等,而 ES2015 則是正式名稱,特指該年發(fā)布的正式版本的語言標(biāo)準。本書中提到 ES6 的地方,一般是指 ES2015 標(biāo)準,但有時也是泛指“下一代 JavaScript 語言”。

語法提案的批準流程

任何人都可以向標(biāo)準委員會(又稱 TC39 委員會)提案,要求修改語言標(biāo)準。

一種新的語法從提案到變成正式標(biāo)準,需要經(jīng)歷五個階段。每個階段的變動都需要由 TC39 委員會批準。

  • -Stage 0 - Strawman(展示階段)
  • -Stage 1 - Proposal(征求意見階段)
  • -Stage 2 - Draft(草案階段)
  • -Stage 3 - Candidate(候選人階段)
  • -Stage 4 - Finished(定案階段)

    一個提案只要能進入 Stage 2,就差不多肯定會包括在以后的正式標(biāo)準里面。

    ECMAScript 的歷史

    ES6 從開始制定到最后發(fā)布,整整用了15 年。

    前面提到,ECMAScript 1.0 是 1997 年發(fā)布的,接下來的兩年,連續(xù)發(fā)布了 ECMAScript 2.0(1998 年 6 月)和 ECMAScript 3.0(1999 年 12 月)。3.0 版是一個巨大的成功,在業(yè)界得到廣泛支持,成為通行標(biāo)準,奠定了 JavaScript 語言的基本語法,以后的版本完全繼承。直到今天,初學(xué)者一開始學(xué)習(xí) JavaScript,其實就是在學(xué) 3.0 版的語法。

    2000 年,ECMAScript 4.0 開始醞釀。這個版本最后沒有通過,但是它的大部分內(nèi)容被 ES6 繼承了。因此,ES6 制定的起點其實是 2000 年。

    為什么 ES4 沒有通過呢?因為這個版本太激進了,對 ES3 做了徹底升級,導(dǎo)致標(biāo)準委員會的一些成員不愿意接受。ECMA 的第 39 號技術(shù)專家委員會(Technical Committee 39,簡稱 TC39)負責(zé)制訂 ECMAScript 標(biāo)準,成員包括 Microsoft、Mozilla、Google 等大公司。

    2007 年 10 月,ECMAScript 4.0 版草案發(fā)布,本來預(yù)計次年 8 月發(fā)布正式版本。但是,各方對于是否通過這個標(biāo)準,發(fā)生了嚴重分歧。以 Yahoo、Microsoft、Google 為首的大公司,反對 JavaScript 的大幅升級,主張小幅改動;以 JavaScript 創(chuàng)造者 Brendan Eich 為首的 Mozilla 公司,則堅持當(dāng)前的草案。

    2008 年 7 月,由于對于下一個版本應(yīng)該包括哪些功能,各方分歧太大,爭論過于激烈,ECMA 開會決定,中止 ECMAScript 4.0 的開發(fā),將其中涉及現(xiàn)有功能改善的一小部分,發(fā)布為 ECMAScript 3.1,而將其他激進的設(shè)想擴大范圍,放入以后的版本,由于會議的氣氛,該版本的項目代號起名為 Harmony(和諧)。會后不久,ECMAScript 3.1 就改名為 ECMAScript 5。

    2009 年 12 月,ECMAScript 5.0 版正式發(fā)布。Harmony 項目則一分為二,一些較為可行的設(shè)想定名為 JavaScript.next 繼續(xù)開發(fā),后來演變成 ECMAScript 6;一些不是很成熟的設(shè)想,則被視為 JavaScript.next.next,在更遠的將來再考慮推出。TC39 委員會的總體考慮是,ES5 與 ES3 基本保持兼容,較大的語法修正和新功能加入,將由 JavaScript.next 完成。當(dāng)時,JavaScript.next 指的是 ES6,第六版發(fā)布以后,就指 ES7。TC39 的判斷是,ES5 會在 2013 年的年中成為 JavaScript 開發(fā)的主流標(biāo)準,并在此后五年中一直保持這個位置。

    2011 年 6 月,ECMAScript 5.1 版發(fā)布,并且成為 ISO 國際標(biāo)準(ISO/IEC 16262:2011)。

    2013 年 3 月,ECMAScript 6 草案凍結(jié),不再添加新功能。新的功能設(shè)想將被放到 ECMAScript 7。

    2013 年 12 月,ECMAScript 6 草案發(fā)布。然后是 12 個月的討論期,聽取各方反饋。

    2015 年 6 月,ECMAScript 6 正式通過,成為國際標(biāo)準。從 2000 年算起,這時已經(jīng)過去了 15 年。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號