JavaScript語(yǔ)言的歷史(轉(zhuǎn)載)

JavaScript語(yǔ)言的歷史

來(lái)自《JavaScript 標(biāo)準(zhǔn)參考教程(alpha)》,by 阮一峰

目錄

JavaScript的誕生

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ù)器端完成。比如,如果用戶忘記填寫(xiě)“用戶名”,就點(diǎn)了“發(fā)送”按鈕,到服務(wù)器再發(fā)現(xiàn)這一點(diǎn)就有點(diǎn)太晚了,最好能在用戶發(fā)出數(shù)據(jù)之前,就告訴用戶“請(qǐng)?zhí)顚?xiě)用戶名”。這就需要在網(wǎng)頁(yè)中嵌入小程序,讓瀏覽器檢查每一欄是否都填寫(xiě)了。

管理層對(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)源:

  • 基本語(yǔ)法:借鑒C語(yǔ)言和Java語(yǔ)言。
  • 數(shù)據(jù)結(jié)構(gòu):借鑒Java語(yǔ)言,包括將值分成原始值和對(duì)象兩大類。
  • 函數(shù)的用法:借鑒Scheme語(yǔ)言和Awk語(yǔ)言,將函數(shù)當(dāng)作第一等公民,并引入閉包。
  • 原型繼承模型:借鑒Self語(yǔ)言(Smalltalk的一種變種)。
  • 正則表達(dá)式:借鑒Perl語(yǔ)言。
  • 字符串和數(shù)組處理:借鑒Python語(yǔ)言。

為了保持簡(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月改為L(zhǎng)iveScript。12月,Netscape公司與Sun公司(Java語(yǔ)言的發(fā)明者和所有者)達(dá)成協(xié)議,后者允許將這種語(yǔ)言叫做JavaScript。這樣一來(lái),Netscape公司可以借助Java語(yǔ)言的聲勢(shì),而Sun公司則將自己的影響力擴(kuò)展到了瀏覽器。

之所以起這個(gè)名字,并不是因?yàn)镴avaScript本身與Java語(yǔ)言有多么深的關(guān)系(事實(shí)上,兩者關(guān)系并不深),而是因?yàn)镹etscape公司已經(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ǔ)言。當(dāng)時(shí)的意圖是將 JavaScript 作為 Java 的補(bǔ)充,用來(lái)操作網(wǎng)頁(yè)。

1996年3月,Navigator 2.0 瀏覽器正式內(nèi)置了 JavaScript 腳本語(yǔ)言。

JavaScript與ECMAScript的關(guān)系

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。

JavaScript與Java的關(guān)系

JavaScript和Java是兩種不一樣的語(yǔ)言,但是它們之間存在聯(lián)系。

JavaScript的基本語(yǔ)法和對(duì)象體系,是模仿Java而設(shè)計(jì)的。但是,JavaScript沒(méi)有采用Java的靜態(tài)類型。正是因?yàn)镴avaScript與Java有很大的相似性,所以這門語(yǔ)言才從一開(kāi)始的LiveScript改名為JavaScript。基本上,JavaScript這個(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程序員)可以快速上手。

JavaScript的版本

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)門C39委員會(huì)計(jì)劃,以后每年發(fā)布一個(gè)ECMAScirpt的版本,下一個(gè)版本在2016年發(fā)布,稱為“ECMAScript 2016”。

除了ECMAScript的版本,很長(zhǎng)一段時(shí)間中,Netscape公司(以及繼承它的Mozilla基金會(huì))在內(nèi)部依然使用自己的版本號(hào)。這導(dǎo)致了JavaScript有自己不同于ECMAScript的版本號(hào)。1996年3月,Navigator 2.0內(nèi)置了JavaScript 1.0。JavaScript 1.1版對(duì)應(yīng)ECMAScript 1.0,但是直到JavaScript 1.4版才完全兼容ECMAScript 1.0。JavaScript 1.5版完全兼容ECMAScript 3.0。目前的JavaScript 1.8版完全兼容ECMAScript 5。

周邊大事記

JavaScript伴隨著互聯(lián)網(wǎng)的發(fā)展一起發(fā)展?;ヂ?lián)網(wǎng)周邊技術(shù)的快速發(fā)展,刺激和推動(dòng)了JavaScript語(yǔ)言的發(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)目重寫(xiě)了瀏覽器引擎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年,蘋(píng)果公司發(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年,蘋(píng)果公司在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)目(縮寫(xiě)為GWT),提供Java編譯成JavaScript的功能,開(kāi)創(chuàng)了將其他語(yǔ)言轉(zhuǎn)為JavaScript的先河。

2007年,Webkit引擎在iPhone手機(jī)中得到部署。它最初基于KDE項(xiàng)目,2003年蘋(píng)果公司首先采用,2005年開(kāi)源。這標(biāo)志著JavaScript語(yǔ)言開(kāi)始能在手機(jī)中使用了,意味著有可能寫(xiě)出在桌面電腦和手機(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)行變得非??臁K岣吡薐avaScript的性能,推動(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編寫(xiě)應(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的超集,這意味著所有JavaScipt程序,都可以不經(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ū)LVM的位代碼(bitcode)轉(zhuǎn)為JavaScript代碼,在瀏覽器中運(yùn)行。因?yàn)榇蟛糠諰LVM位代碼都是從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ā)。

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語(yǔ)言編譯后的二進(jìn)制格式,類似于Java的字節(jié)碼,有利于移動(dòng)設(shè)備加載JavaScript腳本,解析速度提高了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ě)法出現(xiàn)了根本的變化。

2017年11月,所有主流瀏覽器全部支持 WebAssembly,這意味著任何語(yǔ)言都可以編譯成 JavaScript,在瀏覽器運(yùn)行。

參考鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • title: JavaScript的歷史layout: pagecategory: introductiondat...
    ichengzi閱讀 4,518評(píng)論 0 23
  • JavaScript的發(fā)展歷史 JavaScript因?yàn)榛ヂ?lián)網(wǎng)而生,緊隨著瀏覽器的出現(xiàn)而問(wèn)世?;仡櫵臍v史,就要從...
    zh_yang閱讀 439評(píng)論 0 0
  • 今晚第一次和課堂外的朋友分享我九型二階段的感受和經(jīng)歷,這個(gè)朋友和我一起練習(xí)昆達(dá)瑜伽,也是三階段的畢業(yè)學(xué)員,她前幾天...
    bef243e45c7f閱讀 347評(píng)論 0 0
  • I:經(jīng)常抱怨的人是因?yàn)橥饨缡挛餂](méi)有按照自己的愿望發(fā)生改變而產(chǎn)生不滿,這種態(tài)度會(huì)給身邊的人帶來(lái)痛苦; 用接受得心態(tài)來(lái)...
    木子and子木閱讀 162評(píng)論 0 0
  • 近三天來(lái)完全看不進(jìn)書(shū),拿著手機(jī)就玩 ,心情很煩躁。今天想了想,都是剩下的時(shí)間不多,我自己太緊張了,只不過(guò)...
    忽爾今至閱讀 296評(píng)論 0 0

友情鏈接更多精彩內(nèi)容