JavaScript 由於互聯網而生,緊隨着瀏覽器的出現而問世。回顧它的歷史,就要從瀏覽器的歷史講起。javascript
1990年末,歐洲核能研究組織(CERN)科學家Tim Berners-Lee,在全世界最大的電腦網絡——互聯網的基礎上,發明了萬維網(World Wide Web),今後能夠在網上瀏覽網頁文件。最先的網頁只能在操做系統的終端裏瀏覽,也就是說只能使用命令行操做,網頁都是在字符窗口中顯示,這固然很是不方便。前端
1992年末,美國國家超級電腦應用中心(NCSA)開始開發一個獨立的瀏覽器,叫作Mosaic。這是人類歷史上第一個瀏覽器,今後網頁能夠在圖形界面的窗口瀏覽。java
1994年10月,NCSA的一個主要程序員Marc Andreessen聯合風險投資家Jim Clark,成立了Mosaic通訊公司(Mosaic Communications),不久後更名爲Netscape。這家公司的方向,就是在Mosaic的基礎上,開發面向普通用戶的新一代的瀏覽器Netscape Navigator。git
1994年12月,Navigator發佈了1.0版,市場份額一舉超過90%。程序員
Netscape 公司很快發現,Navigator瀏覽器須要一種能夠嵌入網頁的腳本語言,用來控制瀏覽器行爲。當時,網速很慢並且上網費很貴,有些操做不宜在服務器端完成。好比,若是用戶忘記填寫「用戶名」,就點了「發送」按鈕,到服務器再發現這一點就有點太晚了,最好能在用戶發出數據以前,就告訴用戶「請填寫用戶名」。這就須要在網頁中嵌入小程序,讓瀏覽器檢查每一欄是否都填寫了。github
管理層對這種瀏覽器腳本語言的設想是:功能不須要太強,語法較爲簡單,容易學習和部署。那一年,正逢Sun公司的Java語言問世,市場推廣活動很是成功。Netscape公司決定與Sun公司合做,瀏覽器支持嵌入Java小程序(後來稱爲Java applet)。可是,瀏覽器腳本語言是否就選用Java,則存在爭論。後來,仍是決定不使用Java,由於網頁小程序不須要Java這麼「重」的語法。可是,同時也決定腳本語言的語法要接近Java,而且能夠支持Java程序。這些設想直接排除了使用現存語言,好比Perl、Python和TCL。正則表達式
1995年,Netscape公司僱傭了程序員Brendan Eich開發這種網頁腳本語言。Brendan Eich有很強的函數式編程背景,但願以Scheme語言(函數式語言鼻祖LISP語言的一種方言)爲藍本,實現這種新語言。數據庫
1995年5月,Brendan Eich只用了10天,就設計完成了這種語言的初版。它是一個大雜燴,語法有多個來源:npm
爲了保持簡單,這種腳本語言缺乏一些關鍵的功能,好比塊級做用域、模塊、子類型(subtyping)等等,可是能夠利用現有功能找出解決辦法。這種功能的不足,直接致使了後來JavaScript的一個顯著特色:對於其餘語言,你須要學習語言的各類功能,而對於JavaScript,你經常須要學習各類解決問題的模式。並且因爲來源多樣,從一開始就註定,JavaScript的編程風格是函數式編程和麪向對象編程的一種混合體。編程
Netscape 公司的這種瀏覽器腳本語言,最初名字叫作 Mocha,1995年9月改成LiveScript。12月,Netscape公司與Sun公司(Java語言的發明者和全部者)達成協議,後者容許將這種語言叫作JavaScript。這樣一來,Netscape公司能夠藉助Java語言的聲勢,而Sun公司則將本身的影響力擴展到了瀏覽器。
之因此起這個名字,並非由於JavaScript自己與Java語言有多麼深的關係(事實上,二者關係並不深),而是由於Netscape公司已經決定,使用Java語言開發網絡應用程序,JavaScript能夠像膠水同樣,將各個部分鏈接起來。固然,後來的歷史是Java語言的瀏覽器插件失敗了,JavaScript反而發揚光大。
1995年12月4日,Netscape 公司與 Sun 公司聯合發佈了 JavaScript 語言。當時的意圖是將 JavaScript 做爲 Java 的補充,用來操做網頁。
1996年3月,Navigator 2.0 瀏覽器正式內置了 JavaScript 腳本語言。
1996年8月,微軟模仿JavaScript開發了一種相近的語言,取名爲JScript(JavaScript是Netscape的註冊商標,微軟不能用),首先內置於IE 3.0。Netscape公司面臨喪失瀏覽器腳本語言的主導權的局面。
1996年11月,Netscape公司決定將JavaScript提交給國際標準化組織ECMA(European Computer Manufacturers Association),但願JavaScript可以成爲國際標準,以此抵抗微軟。ECMA的39號技術委員會(Technical Committee 39)負責制定和審覈這個標準,成員由業內的大公司派出的工程師組成,目前共25我的。該委員會按期開會,全部的郵件討論和會議記錄,都是公開的。
1997年7月,ECMA組織發佈262號標準文件(ECMA-262)的初版,規定了瀏覽器腳本語言的標準,並將這種語言稱爲ECMAScript。這個版本就是ECMAScript 1.0版。之因此不叫JavaScript,一方面是因爲商標的關係,Java是Sun公司的商標,根據一份受權協議,只有Netscape公司能夠合法地使用JavaScript這個名字,且JavaScript已經被Netscape公司註冊爲商標,另外一方面也是想體現這門語言的制定者是ECMA,不是Netscape,這樣有利於保證這門語言的開放性和中立性。所以,ECMAScript和JavaScript的關係是,前者是後者的規格,後者是前者的一種實現。在平常場合,這兩個詞是能夠互換的。
ECMAScript只用來標準化JavaScript這種語言的基本語法結構,與部署環境相關的標準都由其餘標準規定,好比DOM的標準就是由W3C組織(World Wide Web Consortium)制定的。
ECMA-262標準後來也被另外一個國際標準化組織ISO(International Organization for Standardization)批准,標準號是ISO-16262。
JavaScript和Java是兩種不同的語言,可是它們之間存在聯繫。
JavaScript的基本語法和對象體系,是模仿Java而設計的。可是,JavaScript沒有采用Java的靜態類型。正是由於JavaScript與Java有很大的類似性,因此這門語言才從一開始的LiveScript更名爲JavaScript。基本上,JavaScript這個名字的原意是「很像Java的腳本語言」。
在JavaScript語言中,函數是一種獨立的數據類型,以及採用基於原型對象(prototype)的繼承鏈。這是它與Java語法最大的兩點區別。JavaScript語法要比Java自由得多。
另外,Java語言須要編譯,而JavaScript語言則是運行時由解釋器直接執行。
總之,JavaScript的原始設計目標是一種小型的、簡單的動態語言,與Java有足夠的類似性,使得使用者(尤爲是Java程序員)能夠快速上手。
1997年7月,ECMAScript 1.0發佈。
1998年6月,ECMAScript 2.0版發佈。
1999年12月,ECMAScript 3.0版發佈,成爲JavaScript的通行標準,獲得了普遍支持。
2007年10月,ECMAScript 4.0版草案發布,對3.0版作了大幅升級,預計次年8月發佈正式版本。草案發布後,因爲4.0版的目標過於激進,各方對因而否經過這個標準,發生了嚴重分歧。以Yahoo、Microsoft、Google爲首的大公司,反對JavaScript的大幅升級,主張小幅改動;以JavaScript創造者Brendan Eich爲首的Mozilla公司,則堅持當前的草案。
2008年7月,因爲對於下一個版本應該包括哪些功能,各方分歧太大,爭論過於激進,ECMA開會決定,停止ECMAScript 4.0的開發(即廢除了這個版本),將其中涉及現有功能改善的一小部分,發佈爲ECMAScript 3.1,而將其餘激進的設想擴大範圍,放入之後的版本,因爲會議的氣氛,該版本的項目代號起名爲Harmony(和諧)。會後不久,ECMAScript 3.1就更名爲ECMAScript 5。
2009年12月,ECMAScript 5.0版正式發佈。Harmony項目則一分爲二,一些較爲可行的設想定名爲JavaScript.next繼續開發,後來演變成ECMAScript 6;一些不是很成熟的設想,則被視爲JavaScript.next.next,在更遠的未來再考慮推出。TC39的整體考慮是,ECMAScript 5與ECMAScript 3基本保持兼容,較大的語法修正和新功能加入,將由JavaScript.next完成。當時,JavaScript.next指的是ECMAScript 6。第六版發佈之後,將指ECMAScript 7。TC39預計,ECMAScript 5會在2013年的年中成爲JavaScript開發的主流標準,並在此後五年中一直保持這個位置。
2011年6月,ECMAscript 5.1版發佈,而且成爲ISO國際標準(ISO/IEC 16262:2011)。到了2012年末,全部主要瀏覽器都支持ECMAScript 5.1版的所有功能。
2013年3月,ECMAScript 6草案凍結,再也不添加新功能。新的功能設想將被放到ECMAScript 7。
2013年12月,ECMAScript 6草案發布。而後是12個月的討論期,聽取各方反饋。
2015年6月,ECMAScript 6正式發佈,而且改名爲「ECMAScript 2015」。這是由於TC39委員會計劃,之後每一年發佈一個ECMAScirpt的版本,下一個版本在2016年發佈,稱爲「ECMAScript 2016」。
除了ECMAScript的版本,很長一段時間中,Netscape公司(以及繼承它的Mozilla基金會)在內部依然使用本身的版本號。這致使了JavaScript有本身不一樣於ECMAScript的版本號。1996年3月,Navigator 2.0內置了JavaScript 1.0。JavaScript 1.1版對應ECMAScript 1.0,可是直到JavaScript 1.4版才徹底兼容ECMAScript 1.0。JavaScript 1.5版徹底兼容ECMAScript 3.0。目前的JavaScript 1.8版徹底兼容ECMAScript 5。
JavaScript伴隨着互聯網的發展一塊兒發展。互聯網周邊技術的快速發展,刺激和推進了JavaScript語言的發展。
1996年,樣式表標準CSS初版發佈。
1997年,DHTML(Dynamic HTML,動態HTML)發佈,容許動態改變網頁內容。這標誌着DOM模式(Document Object Model,文檔對象模型)正式應用。
1998年,Netscape公司開源了瀏覽器套件,這致使了Mozilla項目的誕生。幾個月後,美國在線(AOL)宣佈併購Netscape。
1999年,IE 5部署了XMLHttpRequest接口,容許JavaScript發出HTTP請求,爲後來大行其道的Ajax應用創造了條件。
2000年,KDE項目重寫了瀏覽器引擎KHTML,爲後來的WebKit和Blink引擎打下基礎。這一年的10月23日,KDE 2.0發佈,第一次將KHTML瀏覽器包括其中。
2001年,微軟公司時隔5年以後,發佈了IE瀏覽器的下一個版本Internet Explorer 6。這是當時最早進的瀏覽器,它後來統治了瀏覽器市場多年。
2001年,Douglas Crockford提出了JSON格式,用於取代XML格式,進行服務器和網頁之間的數據交換。JavaScript能夠原生支持這種格式,不須要額外部署代碼。
2002年,Mozilla項目發佈了它的瀏覽器的初版,後來起名爲Firefox。
2003年,蘋果公司發佈了Safari瀏覽器的初版。
2004年,Google公司發佈了Gmail,促成了互聯網應用程序(Web Application)這個概念的誕生。因爲Gmail是在4月1日發佈的,不少人起初覺得這只是一個玩笑。
2004年,Dojo框架誕生,爲不一樣瀏覽器提供了同一接口,併爲主要功能提供了便利的調用方法。這標誌着JavaScript編程框架的時代開始來臨。
2004年,WHATWG組織成立,致力於加速HTML語言的標準化進程。
2005年,蘋果公司在KHTML引擎基礎上,創建了WebKit引擎。
2005年,Ajax方法(Asynchronous JavaScript and XML)正式誕生,Jesse James Garrett發明了這個詞彙。它開始流行的標誌是,2月份發佈的Google Maps項目大量採用該方法。它幾乎成了新一代網站的標準作法,促成了Web 2.0時代的來臨。
2005年,Apache基金會發布了CouchDB數據庫。這是一個基於JSON格式的數據庫,能夠用JavaScript函數定義視圖和索引。它在本質上有別於傳統的關係型數據庫,標識着NoSQL類型的數據庫誕生。
2006年,jQuery函數庫誕生,做者爲John Resig。jQuery爲操做網頁DOM結構提供了很是強大易用的接口,成爲了使用最普遍的函數庫,而且讓JavaScript語言的應用難度大大下降,推進了這種語言的流行。
2006年,微軟公司發佈IE 7,標誌從新開始啓動瀏覽器的開發。
2006年,Google推出 Google Web Toolkit 項目(縮寫爲GWT),提供Java編譯成JavaScript的功能,開創了將其餘語言轉爲JavaScript的先河。
2007年,Webkit引擎在iPhone手機中獲得部署。它最初基於KDE項目,2003年蘋果公司首先採用,2005年開源。這標誌着JavaScript語言開始能在手機中使用了,意味着有可能寫出在桌面電腦和手機中都能使用的程序。
2007年,Douglas Crockford發表了名爲《JavaScript: The good parts》的演講,次年由O’Reilly出版社出版。這標誌着軟件行業開始嚴肅對待JavaScript語言,對它的語法開始從新認識,
2008年,V8編譯器誕生。這是Google公司爲Chrome瀏覽器而開發的,它的特色是讓JavaScript的運行變得很是快。它提升了JavaScript的性能,推進了語法的改進和標準化,改變外界對JavaScript的不佳印象。同時,V8是開源的,任何人想要一種快速的嵌入式腳本語言,均可以採用V8,這拓展了JavaScript的應用領域。
2009年,Node.js項目誕生,創始人爲Ryan Dahl,它標誌着JavaScript能夠用於服務器端編程,今後網站的前端和後端可使用同一種語言開發。而且,Node.js能夠承受很大的併發流量,使得開發某些互聯網大規模的實時應用變得容易。
2009年,Jeremy Ashkenas發佈了CoffeeScript的最第一版本。CoffeeScript能夠被轉化爲JavaScript運行,可是語法要比JavaScript簡潔。這開啓了其餘語言轉爲JavaScript的風潮。
2009年,PhoneGap項目誕生,它將HTML5和JavaScript引入移動設備的應用程序開發,主要針對iOS和Android平臺,使得JavaScript能夠用於跨平臺的應用程序開發。
2009,Google發佈Chrome OS,號稱是以瀏覽器爲基礎發展成的操做系統,容許直接使用JavaScript編寫應用程序。相似的項目還有Mozilla的Firefox OS。
2010年,三個重要的項目誕生,分別是NPM、BackboneJS和RequireJS,標誌着JavaScript進入模塊化開發的時代。
2011年,微軟公司發佈Windows 8操做系統,將JavaScript做爲應用程序的開發語言之一,直接提供系統支持。
2011年,Google發佈了Dart語言,目的是爲告終束JavaScript語言在瀏覽器中的壟斷,提供更合理、更強大的語法和功能。Chromium瀏覽器有內置的Dart虛擬機,能夠運行Dart程序,但Dart程序也能夠被編譯成JavaScript程序運行。
2011年,微軟工程師Scott Hanselman提出,JavaScript將是互聯網的彙編語言。由於它無所不在,並且正在變得愈來愈快。其餘語言的程序能夠被轉成JavaScript語言,而後在瀏覽器中運行。
2012年,單頁面應用程序框架(single-page app framework)開始崛起,AngularJS項目和Ember項目都發布了1.0版本。
2012年,微軟發佈TypeScript語言。該語言被設計成JavaScript的超集,這意味着全部JavaScipt程序,均可以不經修改地在TypeScript中運行。同時,TypeScript添加了不少新的語法特性,主要目的是爲了開發大型程序,而後還能夠被編譯成JavaScript運行。
2012年,Mozilla基金會提出asm.js規格。asm.js是JavaScript的一個子集,全部符合asm.js的程序均可以在瀏覽器中運行,它的特殊之處在於語法有嚴格限定,能夠被快速編譯成性能良好的機器碼。這樣作的目的,是爲了給其餘語言提供一個編譯規範,使其能夠被編譯成高效的JavaScript代碼。同時,Mozilla基金會還發起了Emscripten項目,目標就是提供一個跨語言的編譯器,可以將LLVM的位代碼(bitcode)轉爲JavaScript代碼,在瀏覽器中運行。由於大部分LLVM位代碼都是從C / C++語言生成的,這意味着C / C++將能夠在瀏覽器中運行。此外,Mozilla旗下還有LLJS(將JavaScript轉爲C代碼)項目和River Trail(一個用於多核心處理器的ECMAScript擴展)項目。目前,在能夠被編譯成JavaScript的語言列表上,共有將近40種語言。
2013年,Mozilla基金會發布手機操做系統Firefox OS,該操做系統的整個用戶界面都使用JavaScript。
2013年,ECMA正式推出JSON的國際標準,這意味着JSON格式已經變得與XML格式同樣重要和正式了。
2013年5月,Facebook發佈UI框架庫React,引入了新的JSX語法,使得UI層能夠用組件開發。
2014年,微軟推出JavaScript的Windows庫WinJS,標誌微軟公司全面支持JavaScript與Windows操做系統的融合。
2014年11月,因爲對Joyent公司壟斷Node項目、以及該項目進展緩慢的不滿,一部分核心開發者離開了Node.js,創造了io.js項目,這是一個更開放、更新更頻繁的Node.js版本,很短期內就發佈到了2.0版。三個月後,Joyent公司宣佈放棄對Node項目的控制,將其轉交給新成立的開放性質的Node基金會。隨後,io.js項目宣佈迴歸Node,兩個版本將合併。
2015年3月,Facebook公司發佈了React Native項目,將React框架移植到了手機端,能夠用來開發手機App。它會將JavaScript代碼轉爲iOS平臺的Objective-C代碼,或者Android平臺的Java代碼,從而爲JavaScript語言開發高性能的原生App打開了一條道路。
2015年4月,Angular框架宣佈,2.0版將基於微軟公司的TypeScript語言開發,這等於爲JavaScript語言引入了強類型。
2015年5月,Node模塊管理器npm超越CPAN,標誌着JavaScript成爲世界上軟件模塊最多的語言。
2015年5月,Google公司的Polymer框架發佈1.0版。該項目的目標是生產環境可使用WebComponent組件,若是可以達到目標,Web開發將進入一個全新的以組件爲開發基礎的階段。
2015年6月,ECMA標準化組織正式批准了ECMAScript 6語言標準,定名爲《ECMAScript 2015 標準》。JavaScript語言正式進入了下一個階段,成爲一種企業級的、開發大規模應用的語言。這個標準從提出到批准,歷時10年,而JavaScript語言從誕生至今也已經20年了。
2015年6月,Mozilla 在 asm.js 的基礎上發佈 WebAssembly 項目。這是一種JavaScript語言編譯後的二進制格式,相似於Java的字節碼,有利於移動設備加載JavaScript腳本,解析速度提升了20+倍。這意味着未來的軟件,會發布JavaScript二進制包。
2016年6月,《ECMAScript 2016 標準》發佈。與前一年發佈的版本相比,它只增長了兩個較小的特性。
2017年6月,《ECMAScript 2017 標準》發佈,正式引入了 async 函數,使得異步操做的寫法出現了根本的變化。
2017年11月,全部主流瀏覽器所有支持 WebAssembly,這意味着任何語言均可以編譯成 JavaScript,在瀏覽器運行。