JavaScript 因?yàn)榛ヂ?lián)網(wǎng)而生,緊跟著瀏覽器的出現(xiàn)而問(wèn)世?;仡櫵臍v史,就要從瀏覽器的歷史講起。
1990年底,歐洲核能研究組織(CERN)科學(xué)家 Tim Berners-Lee,在全世界最大的電腦網(wǎng)絡(luò)——互聯(lián)網(wǎng)的基礎(chǔ)上,發(fā)明了萬(wàn)維網(wǎng)(World Wide Web),從此可以在網(wǎng)上瀏覽網(wǎng)頁(yè)文件。最早的網(wǎng)頁(yè)只能在操作系統(tǒng)的終端里瀏覽,也就是說(shuō)只能使用命令行操作,網(wǎng)頁(yè)都是在字符窗口中顯示,這當(dāng)然非常不方便。
1992年底,美國(guó)國(guó)家超級(jí)電腦應(yīng)用中心(NCSA)開(kāi)始開(kāi)發(fā)一個(gè)獨(dú)立的瀏覽器,叫做 Mosaic。這是人類歷史上第一個(gè)瀏覽器,從此網(wǎng)頁(yè)可以在圖形界面的窗口瀏覽。
1994年10月,NCSA 的一個(gè)主要程序員 Marc Andreessen 聯(lián)合風(fēng)險(xiǎn)投資家 Jim Clark,成立了 Mosaic 通信公司(Mosaic Communications),不久后改名為 Netscape。這家公司的方向,就是在 Mosaic 的基礎(chǔ)上,開(kāi)發(fā)面向普通用戶的新一代的瀏覽器 Netscape Navigator。
1994年12月,Navigator 發(fā)布了1.0版,市場(chǎng)份額一舉超過(guò)90%。
Netscape 公司很快發(fā)現(xiàn),Navigator 瀏覽器需要一種可以嵌入網(wǎng)頁(yè)的腳本語(yǔ)言,用來(lái)控制瀏覽器行為。當(dāng)時(shí),網(wǎng)速很慢而且上網(wǎng)費(fèi)很貴,有些操作不宜在服務(wù)器端完成。比如,如果用戶忘記填寫“用戶名”,就點(diǎn)了“發(fā)送”按鈕,到服務(wù)器再發(fā)現(xiàn)這一點(diǎn)就有點(diǎn)太晚了,最好能在用戶發(fā)出數(shù)據(jù)之前,就告訴用戶“請(qǐng)?zhí)顚懹脩裘?。這就需要在網(wǎng)頁(yè)中嵌入小程序,讓瀏覽器檢查每一欄是否都填寫了。
管理層對(duì)這種瀏覽器腳本語(yǔ)言的設(shè)想是:功能不需要太強(qiáng),語(yǔ)法較為簡(jiǎn)單,容易學(xué)習(xí)和部署。那一年,正逢 Sun 公司的 Java 語(yǔ)言問(wèn)世,市場(chǎng)推廣活動(dòng)非常成功。Netscape 公司決定與 Sun 公司合作,瀏覽器支持嵌入 Java 小程序(后來(lái)稱為 Java applet)。但是,瀏覽器腳本語(yǔ)言是否就選用 Java,則存在爭(zhēng)論。后來(lái),還是決定不使用 Java,因?yàn)榫W(wǎng)頁(yè)小程序不需要 Java 這么“重”的語(yǔ)法。但是,同時(shí)也決定腳本語(yǔ)言的語(yǔ)法要接近 Java,并且可以支持 Java 程序。這些設(shè)想直接排除了使用現(xiàn)存語(yǔ)言,比如 Perl、Python 和 TCL。
1995年,Netscape 公司雇傭了程序員 Brendan Eich 開(kāi)發(fā)這種網(wǎng)頁(yè)腳本語(yǔ)言。Brendan Eich 有很強(qiáng)的函數(shù)式編程背景,希望以 Scheme 語(yǔ)言(函數(shù)式語(yǔ)言鼻祖 LISP 語(yǔ)言的一種方言)為藍(lán)本,實(shí)現(xiàn)這種新語(yǔ)言。
1995年5月,Brendan Eich 只用了10天,就設(shè)計(jì)完成了這種語(yǔ)言的第一版。它是一個(gè)大雜燴,語(yǔ)法有多個(gè)來(lái)源。
為了保持簡(jiǎn)單,這種腳本語(yǔ)言缺少一些關(guān)鍵的功能,比如塊級(jí)作用域、模塊、子類型(subtyping)等等,但是可以利用現(xiàn)有功能找出解決辦法。這種功能的不足,直接導(dǎo)致了后來(lái) JavaScript 的一個(gè)顯著特點(diǎn):對(duì)于其他語(yǔ)言,你需要學(xué)習(xí)語(yǔ)言的各種功能,而對(duì)于 JavaScript,你常常需要學(xué)習(xí)各種解決問(wèn)題的模式。而且由于來(lái)源多樣,從一開(kāi)始就注定,JavaScript 的編程風(fēng)格是函數(shù)式編程和面向?qū)ο缶幊痰囊环N混合體。
Netscape 公司的這種瀏覽器腳本語(yǔ)言,最初名字叫做 Mocha,1995年9月改為 LiveScript。12月,Netscape 公司與 Sun 公司(Java 語(yǔ)言的發(fā)明者和所有者)達(dá)成協(xié)議,后者允許將這種語(yǔ)言叫做 JavaScript。這樣一來(lái),Netscape 公司可以借助 Java 語(yǔ)言的聲勢(shì),而 Sun 公司則將自己的影響力擴(kuò)展到了瀏覽器。
之所以起這個(gè)名字,并不是因?yàn)?JavaScript 本身與 Java 語(yǔ)言有多么深的關(guān)系(事實(shí)上,兩者關(guān)系并不深,詳見(jiàn)下節(jié)),而是因?yàn)?Netscape 公司已經(jīng)決定,使用 Java 語(yǔ)言開(kāi)發(fā)網(wǎng)絡(luò)應(yīng)用程序,JavaScript 可以像膠水一樣,將各個(gè)部分連接起來(lái)。當(dāng)然,后來(lái)的歷史是 Java 語(yǔ)言的瀏覽器插件失敗了,JavaScript 反而發(fā)揚(yáng)光大。
1995年12月4日,Netscape 公司與 Sun 公司聯(lián)合發(fā)布了 JavaScript 語(yǔ)言,對(duì)外宣傳 JavaScript 是 Java 的補(bǔ)充,屬于輕量級(jí)的 Java,專門用來(lái)操作網(wǎng)頁(yè)。
1996年3月,Navigator 2.0 瀏覽器正式內(nèi)置了 JavaScript 腳本語(yǔ)言。
這里專門說(shuō)一下 JavaScript 和 Java 的關(guān)系。它們是兩種不一樣的語(yǔ)言,但是彼此存在聯(lián)系。
JavaScript 的基本語(yǔ)法和對(duì)象體系,是模仿 Java 而設(shè)計(jì)的。但是,JavaScript 沒(méi)有采用 Java 的靜態(tài)類型。正是因?yàn)?JavaScript 與 Java 有很大的相似性,所以這門語(yǔ)言才從一開(kāi)始的 LiveScript 改名為 JavaScript?;旧希琂avaScript 這個(gè)名字的原意是“很像Java的腳本語(yǔ)言”。
JavaScript 語(yǔ)言的函數(shù)是一種獨(dú)立的數(shù)據(jù)類型,以及采用基于原型對(duì)象(prototype)的繼承鏈。這是它與 Java 語(yǔ)法最大的兩點(diǎn)區(qū)別。JavaScript 語(yǔ)法要比 Java 自由得多。
另外,Java 語(yǔ)言需要編譯,而 JavaScript 語(yǔ)言則是運(yùn)行時(shí)由解釋器直接執(zhí)行。
總之,JavaScript 的原始設(shè)計(jì)目標(biāo)是一種小型的、簡(jiǎn)單的動(dòng)態(tài)語(yǔ)言,與 Java 有足夠的相似性,使得使用者(尤其是 Java 程序員)可以快速上手。
1996年8月,微軟模仿 JavaScript 開(kāi)發(fā)了一種相近的語(yǔ)言,取名為JScript(JavaScript 是 Netscape 的注冊(cè)商標(biāo),微軟不能用),首先內(nèi)置于IE 3.0。Netscape 公司面臨喪失瀏覽器腳本語(yǔ)言的主導(dǎo)權(quán)的局面。
1996年11月,Netscape 公司決定將 JavaScript 提交給國(guó)際標(biāo)準(zhǔn)化組織 ECMA(European Computer Manufacturers Association),希望 JavaScript 能夠成為國(guó)際標(biāo)準(zhǔn),以此抵抗微軟。ECMA 的39號(hào)技術(shù)委員會(huì)(Technical Committee 39)負(fù)責(zé)制定和審核這個(gè)標(biāo)準(zhǔn),成員由業(yè)內(nèi)的大公司派出的工程師組成,目前共25個(gè)人。該委員會(huì)定期開(kāi)會(huì),所有的郵件討論和會(huì)議記錄,都是公開(kāi)的。
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è)詞是可以互換的。
ECMAScript 只用來(lái)標(biāo)準(zhǔn)化 JavaScript 這種語(yǔ)言的基本語(yǔ)法結(jié)構(gòu),與部署環(huán)境相關(guān)的標(biāo)準(zhǔn)都由其他標(biāo)準(zhǔn)規(guī)定,比如 DOM 的標(biāo)準(zhǔn)就是由 W3C組織(World Wide Web Consortium)制定的。
ECMA-262 標(biāo)準(zhǔn)后來(lái)也被另一個(gè)國(guó)際標(biāo)準(zhǔn)化組織 ISO(International Organization for Standardization)批準(zhǔn),標(biāo)準(zhǔn)號(hào)是 ISO-16262。
1997年7月,ECMAScript 1.0發(fā)布。
1998年6月,ECMAScript 2.0版發(fā)布。
1999年12月,ECMAScript 3.0版發(fā)布,成為 JavaScript 的通行標(biāo)準(zhǔn),得到了廣泛支持。
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ā)(即廢除了這個(gè)版本),將其中涉及現(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)再考慮推出。TC39 的總體考慮是,ECMAScript 5 與 ECMAScript 3 基本保持兼容,較大的語(yǔ)法修正和新功能加入,將由 JavaScript.next 完成。當(dāng)時(shí),JavaScript.next 指的是ECMAScript 6。第六版發(fā)布以后,將指 ECMAScript 7。TC39 預(yù)計(jì),ECMAScript 5 會(huì)在2013年的年中成為 JavaScript 開(kāi)發(fā)的主流標(biāo)準(zhǔn),并在此后五年中一直保持這個(gè)位置。
2011年6月,ECMAScript 5.1版發(fā)布,并且成為 ISO 國(guó)際標(biāo)準(zhǔn)(ISO/IEC 16262:2011)。到了2012年底,所有主要瀏覽器都支持 ECMAScript 5.1版的全部功能。
2013年3月,ECMAScript 6 草案凍結(jié),不再添加新功能。新的功能設(shè)想將被放到 ECMAScript 7。
2013年12月,ECMAScript 6 草案發(fā)布。然后是12個(gè)月的討論期,聽(tīng)取各方反饋。
2015年6月,ECMAScript 6 正式發(fā)布,并且更名為“ECMAScript 2015”。這是因?yàn)?TC39 委員會(huì)計(jì)劃,以后每年發(fā)布一個(gè) ECMAScript 的版本,下一個(gè)版本在2016年發(fā)布,稱為“ECMAScript 2016”,2017年發(fā)布“ECMAScript 2017”,以此類推。
JavaScript 伴隨著互聯(lián)網(wǎng)的發(fā)展一起發(fā)展?;ヂ?lián)網(wǎng)周邊技術(shù)的快速發(fā)展,刺激和推動(dòng)了 JavaScript 語(yǔ)言的發(fā)展。下面,回顧一下 JavaScript 的周邊應(yīng)用發(fā)展。
1996年,樣式表標(biāo)準(zhǔn) CSS 第一版發(fā)布。
1997年,DHTML(Dynamic HTML,動(dòng)態(tài) HTML)發(fā)布,允許動(dòng)態(tài)改變網(wǎng)頁(yè)內(nèi)容。這標(biāo)志著 DOM 模式(Document Object Model,文檔對(duì)象模型)正式應(yīng)用。
1998年,Netscape 公司開(kāi)源了瀏覽器,這導(dǎo)致了 Mozilla 項(xiàng)目的誕生。幾個(gè)月后,美國(guó)在線(AOL)宣布并購(gòu) Netscape。
1999年,IE 5部署了 XMLHttpRequest 接口,允許 JavaScript 發(fā)出 HTTP 請(qǐng)求,為后來(lái)大行其道的 Ajax 應(yīng)用創(chuàng)造了條件。
2000年,KDE 項(xiàng)目重寫了瀏覽器引擎 KHTML,為后來(lái)的 WebKit 和 Blink 引擎打下基礎(chǔ)。這一年的10月23日,KDE 2.0發(fā)布,第一次將 KHTML 瀏覽器包括其中。
2001年,微軟公司時(shí)隔5年之后,發(fā)布了 IE 瀏覽器的下一個(gè)版本 Internet Explorer 6。這是當(dāng)時(shí)最先進(jìn)的瀏覽器,它后來(lái)統(tǒng)治了瀏覽器市場(chǎng)多年。
2001年,Douglas Crockford 提出了 JSON 格式,用于取代 XML 格式,進(jìn)行服務(wù)器和網(wǎng)頁(yè)之間的數(shù)據(jù)交換。JavaScript 可以原生支持這種格式,不需要額外部署代碼。
2002年,Mozilla 項(xiàng)目發(fā)布了它的瀏覽器的第一版,后來(lái)起名為 Firefox。
2003年,蘋果公司發(fā)布了 Safari 瀏覽器的第一版。
2004年,Google 公司發(fā)布了 Gmail,促成了互聯(lián)網(wǎng)應(yīng)用程序(Web Application)這個(gè)概念的誕生。由于 Gmail 是在4月1日發(fā)布的,很多人起初以為這只是一個(gè)玩笑。
2004年,Dojo 框架誕生,為不同瀏覽器提供了同一接口,并為主要功能提供了便利的調(diào)用方法。這標(biāo)志著 JavaScript 編程框架的時(shí)代開(kāi)始來(lái)臨。
2004年,WHATWG 組織成立,致力于加速 HTML 語(yǔ)言的標(biāo)準(zhǔn)化進(jìn)程。
2005年,蘋果公司在 KHTML 引擎基礎(chǔ)上,建立了 WebKit 引擎。
2005年,Ajax 方法(Asynchronous JavaScript and XML)正式誕生,Jesse James Garrett 發(fā)明了這個(gè)詞匯。它開(kāi)始流行的標(biāo)志是,2月份發(fā)布的 Google Maps 項(xiàng)目大量采用該方法。它幾乎成了新一代網(wǎng)站的標(biāo)準(zhǔn)做法,促成了 Web 2.0時(shí)代的來(lái)臨。
2005年,Apache 基金會(huì)發(fā)布了 CouchDB 數(shù)據(jù)庫(kù)。這是一個(gè)基于 JSON 格式的數(shù)據(jù)庫(kù),可以用 JavaScript 函數(shù)定義視圖和索引。它在本質(zhì)上有別于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),標(biāo)識(shí)著 NoSQL 類型的數(shù)據(jù)庫(kù)誕生。
2006年,jQuery 函數(shù)庫(kù)誕生,作者為John Resig。jQuery 為操作網(wǎng)頁(yè) DOM 結(jié)構(gòu)提供了非常強(qiáng)大易用的接口,成為了使用最廣泛的函數(shù)庫(kù),并且讓 JavaScript 語(yǔ)言的應(yīng)用難度大大降低,推動(dòng)了這種語(yǔ)言的流行。
2006年,微軟公司發(fā)布 IE 7,標(biāo)志重新開(kāi)始啟動(dòng)瀏覽器的開(kāi)發(fā)。
2006年,Google推出 Google Web Toolkit 項(xiàng)目(縮寫為 GWT),提供 Java 編譯成 JavaScript 的功能,開(kāi)創(chuàng)了將其他語(yǔ)言轉(zhuǎn)為 JavaScript 的先河。
2007年,Webkit 引擎在 iPhone 手機(jī)中得到部署。它最初基于 KDE 項(xiàng)目,2003年蘋果公司首先采用,2005年開(kāi)源。這標(biāo)志著 JavaScript 語(yǔ)言開(kāi)始能在手機(jī)中使用了,意味著有可能寫出在桌面電腦和手機(jī)中都能使用的程序。
2007年,Douglas Crockford 發(fā)表了名為《JavaScript: The good parts》的演講,次年由 O'Reilly 出版社出版。這標(biāo)志著軟件行業(yè)開(kāi)始嚴(yán)肅對(duì)待 JavaScript 語(yǔ)言,對(duì)它的語(yǔ)法開(kāi)始重新認(rèn)識(shí)。
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ā)。
2009,Google 發(fā)布 Chrome OS,號(hào)稱是以瀏覽器為基礎(chǔ)發(fā)展成的操作系統(tǒng),允許直接使用 JavaScript 編寫應(yīng)用程序。類似的項(xiàng)目還有 Mozilla 的 Firefox OS。
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 的超集,這意味著所有 JavaScript 程序,都可以不經(jīng)修改地在 TypeScript 中運(yùn)行。同時(shí),TypeScript 添加了很多新的語(yǔ)法特性,主要目的是為了開(kāi)發(fā)大型程序,然后還可以被編譯成 JavaScript 運(yùn)行。
2012年,Mozilla 基金會(huì)提出 asm.js 規(guī)格。asm.js 是 JavaScript 的一個(gè)子集,所有符合 asm.js 的程序都可以在瀏覽器中運(yùn)行,它的特殊之處在于語(yǔ)法有嚴(yán)格限定,可以被快速編譯成性能良好的機(jī)器碼。這樣做的目的,是為了給其他語(yǔ)言提供一個(gè)編譯規(guī)范,使其可以被編譯成高效的 JavaScript 代碼。同時(shí),Mozilla 基金會(huì)還發(fā)起了 Emscripten 項(xiàng)目,目標(biāo)就是提供一個(gè)跨語(yǔ)言的編譯器,能夠?qū)?LLVM 的位代碼(bitcode)轉(zhuǎn)為 JavaScript 代碼,在瀏覽器中運(yùn)行。因?yàn)榇蟛糠?LLVM 位代碼都是從 C / C++ 語(yǔ)言生成的,這意味著 C / C++ 將可以在瀏覽器中運(yùn)行。此外,Mozilla 旗下還有 LLJS (將 JavaScript 轉(zhuǎn)為 C 代碼)項(xiàng)目和 River Trail (一個(gè)用于多核心處理器的 ECMAScript 擴(kuò)展)項(xiàng)目。目前,可以被編譯成 JavaScript 的語(yǔ)言列表,共有將近40種語(yǔ)言。
2013年,Mozilla 基金會(huì)發(fā)布手機(jī)操作系統(tǒng) Firefox OS,該操作系統(tǒng)的整個(gè)用戶界面都使用 JavaScript。
2013年,ECMA 正式推出 JSON 的國(guó)際標(biāo)準(zhǔn),這意味著 JSON 格式已經(jīng)變得與 XML 格式一樣重要和正式了。
2013年5月,F(xiàn)acebook 發(fā)布 UI 框架庫(kù) React,引入了新的 JSX 語(yǔ)法,使得 UI 層可以用組件開(kāi)發(fā),同時(shí)引入了網(wǎng)頁(yè)應(yīng)用是狀態(tài)機(jī)的概念。
2014年,微軟推出 JavaScript 的 Windows 庫(kù) WinJS,標(biāo)志微軟公司全面支持 JavaScript 與 Windows 操作系統(tǒng)的融合。
2014年11月,由于對(duì) Joyent 公司壟斷 Node 項(xiàng)目、以及該項(xiàng)目進(jìn)展緩慢的不滿,一部分核心開(kāi)發(fā)者離開(kāi)了 Node.js,創(chuàng)造了 io.js 項(xiàng)目,這是一個(gè)更開(kāi)放、更新更頻繁的 Node.js 版本,很短時(shí)間內(nèi)就發(fā)布到了2.0版。三個(gè)月后,Joyent 公司宣布放棄對(duì) Node 項(xiàng)目的控制,將其轉(zhuǎn)交給新成立的開(kāi)放性質(zhì)的 Node 基金會(huì)。隨后,io.js 項(xiàng)目宣布回歸 Node,兩個(gè)版本將合并。
2015年3月,F(xiàn)acebook 公司發(fā)布了 React Native 項(xiàng)目,將 React 框架移植到了手機(jī)端,可以用來(lái)開(kāi)發(fā)手機(jī) App。它會(huì)將 JavaScript 代碼轉(zhuǎn)為 iOS 平臺(tái)的 Objective-C 代碼,或者 Android 平臺(tái)的 Java 代碼,從而為 JavaScript 語(yǔ)言開(kāi)發(fā)高性能的原生 App 打開(kāi)了一條道路。
2015年4月,Angular 框架宣布,2.0 版將基于微軟公司的TypeScript語(yǔ)言開(kāi)發(fā),這等于為 JavaScript 語(yǔ)言引入了強(qiáng)類型。
2015年5月,Node 模塊管理器 NPM 超越 CPAN,標(biāo)志著 JavaScript 成為世界上軟件模塊最多的語(yǔ)言。
2015年5月,Google 公司的 Polymer 框架發(fā)布1.0版。該項(xiàng)目的目標(biāo)是生產(chǎn)環(huán)境可以使用 WebComponent 組件,如果能夠達(dá)到目標(biāo),Web 開(kāi)發(fā)將進(jìn)入一個(gè)全新的以組件為開(kāi)發(fā)基礎(chǔ)的階段。
2015年6月,ECMA 標(biāo)準(zhǔn)化組織正式批準(zhǔn)了 ECMAScript 6 語(yǔ)言標(biāo)準(zhǔn),定名為《ECMAScript 2015 標(biāo)準(zhǔn)》。JavaScript 語(yǔ)言正式進(jìn)入了下一個(gè)階段,成為一種企業(yè)級(jí)的、開(kāi)發(fā)大規(guī)模應(yīng)用的語(yǔ)言。這個(gè)標(biāo)準(zhǔn)從提出到批準(zhǔn),歷時(shí)10年,而 JavaScript 語(yǔ)言從誕生至今也已經(jīng)20年了。
2015年6月,Mozilla 在 asm.js 的基礎(chǔ)上發(fā)布 WebAssembly 項(xiàng)目。這是一種 JavaScript 引擎的中間碼格式,全部都是二進(jìn)制,類似于 Java 的字節(jié)碼,有利于移動(dòng)設(shè)備加載 JavaScript 腳本,執(zhí)行速度提高了 20+ 倍。這意味著將來(lái)的軟件,會(huì)發(fā)布 JavaScript 二進(jìn)制包。
2016年6月,《ECMAScript 2016 標(biāo)準(zhǔn)》發(fā)布。與前一年發(fā)布的版本相比,它只增加了兩個(gè)較小的特性。
2017年6月,《ECMAScript 2017 標(biāo)準(zhǔn)》發(fā)布,正式引入了 async 函數(shù),使得異步操作的寫法出現(xiàn)了根本的變化。
2017年11月,所有主流瀏覽器全部支持 WebAssembly,這意味著任何語(yǔ)言都可以編譯成 JavaScript,在瀏覽器運(yùn)行。
更多建議: