javascript的歷史

理解如今的最好方法之一,就是了解歷史,本節將全面介紹JavaScript的歷史。瞭解這些內容,還有助於把握JavaScript在整個計算機編程體系和計算機工業中所處的位置,以及這門語言涉及的所有內容。javascript

JavaScript的誕生

JavaScript由於互聯網而生,緊隨着瀏覽器的出現而問世。回顧它的歷史,就要從瀏覽器的歷史講起。前端

1990年末,歐洲核能研究組織(CERN)科學家Tim Berners-Lee,在全世界最大的電腦網絡——互聯網的基礎上,發明了萬維網(World Wide Web),今後能夠在網上瀏覽網頁文件。最先的網頁只能在操做系統的終端裏瀏覽,也就是說只能使用命令行操做,網頁都是在字符窗口中顯示,這固然很是不方便。java

1992年末,美國國家超級電腦應用中心(NCSA)開始開發一個獨立的瀏覽器,叫作Mosaic。這是人類歷史上第一個瀏覽器,今後網頁能夠在圖形界面的窗口瀏覽。python

1994年10月,NCSA的一個主要程序員Marc Andreessen聯合風險投資家Jim Clark,成立了Mosaic通訊公司(Mosaic Communications),不久後更名爲Netscape。這家公司的方向,就是在Mosaic的基礎上,開發面向普通用戶的新一代的瀏覽器Netscape Navigator。git

1994年12月,Navigator發佈了1.0版,市場份額一舉超過90%。程序員

Netscape公司很快發現,Navigator瀏覽器須要一種能夠嵌入網頁的腳本語言,用來控制瀏覽器行爲。當時,網速很慢並且上網費很貴,有些操做不宜在服務器端完成。好比,若是用戶忘記填寫「用戶名」,就點了「發送」按鈕,到服務器再發現這一點就有點太晚了,最好能在用戶發出數據以前,就告訴用戶「請填寫xx欄」。這就須要在網頁中嵌入小程序,讓瀏覽器檢查每一欄是否都填寫了。github

管理層對這種瀏覽器腳本語言的設想是:功能不須要太強,語法較爲簡單,容易學習和部署。那一年,正逢Java語言開始推向市場,Netscape公司決定,腳本語言的語法要接近Java,而且能夠支持Java程序。這些設想直接排除了使用現存語言,好比perl、python和TCL。正則表達式

1995年,Netscape公司僱傭了程序員Brendan Eich開發這種網頁腳本語言。Brendan Eich有很強的函數式編程背景,但願以Scheme語言(函數式語言鼻祖LISP語言的一種方言)爲藍本,實現這種新語言。數據庫

1995年5月,Brendan Eich只用了10天,就設計完成了這種語言的初版。它是一個大雜燴,語法有多個來源:npm

  • 基本語法:借鑑C語言和Java語言。
  • 數據結構:借鑑Java語言,包括將值分紅原始值和對象兩大類。
  • 函數的用法:借鑑Scheme語言和Awk語言,將函數看成第一等公民,並引入閉包。
  • 原型繼承模型:借鑑Self語言(Smalltalk的一種變種)。
  • 正則表達式:借鑑Perl語言。
  • 字符串和數組處理:借鑑Python語言。

爲了保持簡單,這種腳本語言缺乏一些關鍵的功能,好比塊級做用域、模塊、子類型(subtyping)等等,可是能夠利用現有功能找出解決辦法。這種功能的不足,直接致使了後來JavaScript的一個顯著特色:對於其餘語言,你須要學習語言的各類功能,而對於JavaScript,你經常須要學習各類解決問題的模式。並且因爲來源多樣,從一開始就註定,JavaScript的編程風格是函數式編程和麪向對象編程的一種混合體。

Netscape公司的這種瀏覽器腳本語言,最初名字叫作Mocha,1995年9月改成LiveScript。12月,Netscape公司與Sun公司(Java語言的發明者和全部者)達成協議,後者容許將這種語言叫作JavaScript。這樣一來,Netscape公司能夠藉助Java語言的聲勢,而Sun公司則將本身的影響力擴展到了瀏覽器。

之因此起這個名字,並非由於JavaScript自己與Java語言有多麼深的關係(事實上,二者關係並不深),而是由於Netscape公司已經決定,使用Java語言開發網絡應用程序,JavaScript能夠像膠水同樣,將各個部分鏈接起來。固然,後來的歷史是Java語言的瀏覽器插件(applet)失敗了,JavaScript反而發揚光大。

JavaScript的發佈和標準化

1995年12月4日,Netscape公司與Sun公司聯合發佈了JavaScript語言。值得一提的是,17天以後Ruby語言也發佈了它的第一個版本。

1996年3月,Navigator 2.0瀏覽器正式內置了JavaScript腳本語言。

1996年8月,微軟模仿JavaScript開發了一種相近的語言,取名爲JScript(JavaScript是Netscape的註冊商標,微軟不能用),首先內置於IE 3.0。網景公司面臨喪失瀏覽器腳本語言的主導權的局面。

1996年11月,網景公司決定將JavaScript提交給國際標準化組織ECMA,但願JavaScript可以成爲國際標準,以此抵抗微軟。

1997年7月,ECMA組織發佈262號標準文件(ECMA-262)的初版,規定了瀏覽器腳本語言的標準,並將這種語言稱爲ECMAScript。這個版本就是ECMAScript 1.0版。之因此不叫JavaScript,一方面是因爲商標的關係,Java是Sun公司的商標,根據一份受權協議,只有Netscape公司能夠合法地使用JavaScript這個名字,且JavaScript已經被Netscape公司註冊爲商標,另外一方面也是想體現這門語言的制定者是ECMA,不是Netscape,這樣有利於保證這門語言的開放性和中立性。所以,ECMAScript和JavaScript的關係是,前者是後者的規格,後者是前者的一種實現。在平常場合,這兩個詞是能夠互換的。

1998年6月,ECMAScript 2.0版發佈。

1999年12月,ECMAScript 3.0版發佈,成爲JavaScript的通行標準,獲得了普遍支持。

ECMAScript和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,在更遠的未來再考慮推出。

2011年6月,ECMAscript 5.1版發佈,而且成爲ISO國際標準(ISO/IEC 16262:2011)。

2013年3月,ECMAScript 6草案凍結,再也不添加新功能。新的功能設想將被放到ECMAScript 7。

2013年12月,ECMAScript 6草案發布。而後是12個月的討論期,聽取各方反饋。

2014年12月,ECMAScript 6預計將發佈正式版本。

TC39的整體考慮是,ECMAScript 5與ECMAScript 3基本保持兼容,較大的語法修正和新功能加入,將由JavaScript.next完成。當前,JavaScript.next指的是ECMAScript 6,當第六版發佈之後,將指ECMAScript 7。 TC39預計,ECMAScript 5會在2013年的年中成爲Javascript開發的主流標準,並在從此五年中一直保持這個位置。

雖然ECMAScript是JavaScript的標準,可是Netscape公司(以及後來的Mozilla基金會)在內部依然使用本身的版本號。這致使了JavaScript有本身不一樣於ECMAScript的版本號。

1996年3月,Navigator 2.0內置了JavaScript 1.0。

1996年8月,Navigator 3.0內置了JavaScript 1.1。

1997年6月,Navigator 4.0內置了JavaScript 1.2。

1998年10月,Navigator 4.06內置了JavaScript 1.3。

1999年,Netscape服務器版提供JavaScript 1.4。

2000年11月,Navigator 6.0內置了JavaScript 1.5。

2005年11月,Firefox 1.5內置了JavaScript 1.6。

2006年10月,Firfox 2.0內置了JavaScript 1.7。

2008年6月,Firefox 3.0內置了JavaScript 1.8。

JavaScript 1.1版對應ECMAScript 1.0,可是直到JavaScript 1.4版才徹底兼容ECMAScript 1.0。JavaScript 1.5版徹底兼容ECMAScript 3.0。目前的JavaScript 1.8版徹底兼容ECMAScript 5。

截止2013年初,全部瀏覽器的最新版本——Chrome 24,Firefox 19,IE 10.0,Opera 12,Safari 6——都支持ECMAScript 5.1版。

周邊大事記

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能夠用於跨平臺的應用程序開發。

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格式同樣重要和正式了。

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語言標準,JavaScript語言正式進入了下一個階段,成爲一種企業級的、開發大規模應用的語言。這個標準從提出到批准,歷時10年,而JavaScript語言從誕生至今 也已經20年了。

2015年6月,Mozilla在asm.js的基礎上發佈WebAssembly項目。這是一種JavaScript語言編譯後的二進制格式,相似於Java的字節碼,有利於移動設備加載JavaScript腳本,解析速度提升了20+倍。這意味着未來的軟件,會發布JavaScript二進制包。

相關文章
相關標籤/搜索