HTML/Javascript/CSS號(hào)稱前端三大利器,我們今天要講的就是最像一門計(jì)算機(jī)語(yǔ)言的Javascript臭蚁。那講Javascript,為什么標(biāo)題是ES6/ES2015,這個(gè)ES是什么東東呢弥咪?和Javascript有什么關(guān)系呢过蹂?
Javascript的前世今生
話說(shuō)還得從Javascript的前世今生說(shuō)起。首先眾所周知聚至,工作于 Netscape 的 Brendan Eich酷勺,開(kāi)始著手為即將在 1995 年發(fā)行的 Netscape Navigator 2.0 開(kāi)發(fā)一個(gè)稱之為 LiveScript 的腳本語(yǔ)言,當(dāng)時(shí)的目的是在瀏覽器和服務(wù)器(本來(lái)要叫它 LiveWire)端使用它扳躬。Netscape 與 Sun 及時(shí)完成 LiveScript 實(shí)現(xiàn)。就在 Netscape Navigator 2.0 即將正式發(fā)布前,Netscape 將其更名為 JavaScript禀综,目的是為了利用 Java 這個(gè)因特網(wǎng)時(shí)髦詞匯握联。Netscape 的賭注最終得到回報(bào),JavaScript 從此變成了因特網(wǎng)的必備組件役纹。從本質(zhì)上來(lái)說(shuō)JavaScript和Java沒(méi)什么關(guān)系偶摔。
隨后1996年8月,微軟模仿JavaScript開(kāi)發(fā)了一種相近的語(yǔ)言字管,取名為JScript(JavaScript是Netscape的注冊(cè)商標(biāo)啰挪,微軟不能用),首先內(nèi)置于IE 3.0嘲叔。網(wǎng)景公司面臨喪失瀏覽器腳本語(yǔ)言的主導(dǎo)權(quán)的局面亡呵。
1996年11月,網(wǎng)景公司決定將JavaScript提交給國(guó)際標(biāo)準(zhǔn)化組織ECMA硫戈,希望JavaScript能夠成為國(guó)際標(biāo)準(zhǔn)锰什,以此抵抗微軟。
1997年7月丁逝,ECMA組織發(fā)布262號(hào)標(biāo)準(zhǔn)文件(ECMA-262)的第一版汁胆,規(guī)定了瀏覽器腳本語(yǔ)言的標(biāo)準(zhǔn),并將這種語(yǔ)言稱為ECMAScript霜幼。這個(gè)版本就是ECMAScript 1.0版嫩码。之所以不叫JavaScript,一方面是由于商標(biāo)的關(guān)系罪既,Java是Sun公司的商標(biāo)铸题,根據(jù)一份授權(quán)協(xié)議,只有Netscape公司可以合法地使用JavaScript這個(gè)名字琢感,且JavaScript已經(jīng)被Netscape公司注冊(cè)為商標(biāo)丢间,另一方面也是想體現(xiàn)這門語(yǔ)言的制定者是ECMA,不是Netscape驹针,這樣有利于保證這門語(yǔ)言的開(kāi)放性和中立性烘挫。因此,ECMAScript和JavaScript的關(guān)系是柬甥,前者是后者的規(guī)格饮六,后者是前者的一種實(shí)現(xiàn)其垄。在日常場(chǎng)合,這兩個(gè)詞是可以互換的喜滨。
1998年6月捉捅,ECMAScript 2.0版發(fā)布。
1999年12月虽风,ECMAScript 3.0版發(fā)布棒口,成為JavaScript的通行標(biāo)準(zhǔn),得到了廣泛支持辜膝。
ECMAScript和JavaScript的版本
2007年10月无牵,ECMAScript 4.0版草案發(fā)布,對(duì)3.0版做了大幅升級(jí)厂抖,預(yù)計(jì)次年8月發(fā)布正式版本茎毁。草案發(fā)布后,由于4.0版的目標(biāo)過(guò)于激進(jìn)忱辅,各方對(duì)于是否通過(guò)這個(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)論過(guò)于激進(jìn)沽瞭,ECMA開(kāi)會(huì)決定,中止ECMAScript 4.0的開(kāi)發(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ù)開(kāi)發(fā)擦酌,后來(lái)演變成ECMAScript 6俱诸;一些不是很成熟的設(shè)想,則被視為JavaScript.next.next赊舶,在更遠(yuǎn)的將來(lái)再考慮推出睁搭。
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è)月的討論期,聽(tīng)取各方反饋痛悯。
2015年6月余黎,ECMAScript 6的第一個(gè)版本終于正式發(fā)布,它的目標(biāo)灸蟆,是使得 JavaScript 語(yǔ)言可以用來(lái)編寫復(fù)雜的大型應(yīng)用程序驯耻,成為企業(yè)級(jí)開(kāi)發(fā)語(yǔ)言。而ES2015 則是至當(dāng)時(shí)發(fā)布的第一個(gè)版本的正式名稱炒考,特指該年發(fā)布的正式版本的語(yǔ)言標(biāo)準(zhǔn)可缚。
說(shuō)實(shí)話,感覺(jué)ES2015發(fā)布真的好累斋枢。但是為什么大家打架打的這么厲害呢帘靡,還得了解一下當(dāng)時(shí)Javscript在各個(gè)方面迅速發(fā)展的大背景。
Javscript的迅速發(fā)展
2008年瓤帚,V8編譯器誕生描姚。這是Google公司為Chrome瀏覽器而開(kāi)發(fā)的,它的特點(diǎn)是讓Javascript的運(yùn)行變得非掣甏危快轩勘。它提高了JavaScript的性能,推動(dòng)了語(yǔ)法的改進(jìn)和標(biāo)準(zhǔn)化怯邪,改變外界對(duì)JavaScript的不佳印象绊寻。同時(shí),V8是開(kāi)源的,任何人想要一種快速的嵌入式腳本語(yǔ)言澄步,都可以采用V8冰蘑,這拓展了JavaScript的應(yīng)用領(lǐng)域。
2009年村缸,Node.js項(xiàng)目誕生祠肥,創(chuàng)始人為Ryan Dahl,它標(biāo)志著Javascript可以用于服務(wù)器端編程梯皿,從此網(wǎng)站的前端和后端可以使用同一種語(yǔ)言開(kāi)發(fā)仇箱。并且,Node.js可以承受很大的并發(fā)流量索烹,使得開(kāi)發(fā)某些互聯(lián)網(wǎng)大規(guī)模的實(shí)時(shí)應(yīng)用變得容易工碾。
2009年,Jeremy Ashkenas發(fā)布了CoffeeScript的最初版本百姓。CoffeeScript可以被轉(zhuǎn)化為JavaScript運(yùn)行渊额,但是語(yǔ)法要比JavaScript簡(jiǎn)潔。這開(kāi)啟了其他語(yǔ)言轉(zhuǎn)為JavaScript的風(fēng)潮垒拢。
2009年旬迹,PhoneGap項(xiàng)目誕生,它將HTML5和JavaScript引入移動(dòng)設(shè)備的應(yīng)用程序開(kāi)發(fā)求类,主要針對(duì)iOS和Android平臺(tái)奔垦,使得JavaScript可以用于跨平臺(tái)的應(yīng)用程序開(kāi)發(fā)。
2010年尸疆,三個(gè)重要的項(xiàng)目誕生椿猎,分別是NPM、BackboneJS和RequireJS寿弱,標(biāo)志著JavaScript進(jìn)入模塊化開(kāi)發(fā)的時(shí)代犯眠。
2011年,微軟公司發(fā)布Windows 8操作系統(tǒng)症革,將JavaScript作為應(yīng)用程序的開(kāi)發(fā)語(yǔ)言之一筐咧,直接提供系統(tǒng)支持。
2011年噪矛,Google發(fā)布了Dart語(yǔ)言量蕊,目的是為了結(jié)束JavaScript語(yǔ)言在瀏覽器中的壟斷,提供更合理艇挨、更強(qiáng)大的語(yǔ)法和功能残炮。Chromium瀏覽器有內(nèi)置的Dart虛擬機(jī),可以運(yùn)行Dart程序缩滨,但Dart程序也可以被編譯成JavaScript程序運(yùn)行吉殃。
2011年辞居,微軟工程師Scott Hanselman提出,JavaScript將是互聯(lián)網(wǎng)的匯編語(yǔ)言蛋勺。因?yàn)樗鼰o(wú)所不在,而且正在變得越來(lái)越快鸠删。其他語(yǔ)言的程序可以被轉(zhuǎn)成JavaScript語(yǔ)言抱完,然后在瀏覽器中運(yùn)行。
2012年刃泡,單頁(yè)面應(yīng)用程序框架(single-page app framework)開(kāi)始崛起巧娱,AngularJS項(xiàng)目和Ember項(xiàng)目都發(fā)布了1.0版本。
2012年烘贴,微軟發(fā)布TypeScript語(yǔ)言禁添。該語(yǔ)言被設(shè)計(jì)成JavaScript的超集,這意味著所有JavaScipt程序桨踪,都可以不經(jīng)修改地在TypeScript中運(yùn)行老翘。同時(shí),TypeScript添加了很多新的語(yǔ)法特性锻离,主要目的是為了開(kāi)發(fā)大型程序铺峭,然后還可以被編譯成JavaScript運(yùn)行。
可以說(shuō)Google的V8給Javascript注入了一股強(qiáng)心劑汽纠,讓Javascript開(kāi)始變得成為一門高性能的語(yǔ)言卫键,隨后成為各個(gè)領(lǐng)域應(yīng)用的推手。而后各大公司都開(kāi)始推出自己的Javascript語(yǔ)言版本虱朵,進(jìn)入了群雄爭(zhēng)霸的局面莉炉。自然這種情況是不利于語(yǔ)言的統(tǒng)一發(fā)展的。而國(guó)際標(biāo)準(zhǔn)化組織ECMA的標(biāo)準(zhǔn)版本ECMAScript2015才被寄予厚望碴犬,希望能夠讓Javascript成為一門真正廣泛應(yīng)用的企業(yè)級(jí)開(kāi)發(fā)語(yǔ)言絮宁。
參考文獻(xiàn)
1、http://es6.ruanyifeng.com/#docs/intro
2翅敌、http://www.reibang.com/p/1cd0b2cb3ec4