來源:https://wangdoc.com/javascript/basic/introduction.htmljavascript
JavaScript 由於互聯網而生,緊跟着瀏覽器的出現而問世。回顧它的歷史,就要從瀏覽器的歷史講起。html
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天,就設計完成了這種語言的初版。它是一個大雜燴,語法有多個來源。編程
爲了保持簡單,這種腳本語言缺乏一些關鍵的功能,好比塊級做用域、模塊、子類型(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 的補充,屬於輕量級的 Java,專門用來操做網頁。
1996年3月,Navigator 2.0 瀏覽器正式內置了 JavaScript 腳本語言。
這裏專門說一下 JavaScript 和 Java 的關係。它們是兩種不同的語言,可是彼此存在聯繫。
JavaScript 的基本語法和對象體系,是模仿 Java 而設計的。可是,JavaScript 沒有采用 Java 的靜態類型。正是由於 JavaScript 與 Java 有很大的類似性,因此這門語言才從一開始的 LiveScript 更名爲 JavaScript。基本上,JavaScript 這個名字的原意是「很像Java的腳本語言」。
JavaScript 語言的函數是一種獨立的數據類型,以及採用基於原型對象(prototype)的繼承鏈。這是它與 Java 語法最大的兩點區別。JavaScript 語法要比 Java 自由得多。
另外,Java 語言須要編譯,而 JavaScript 語言則是運行時由解釋器直接執行。
總之,JavaScript 的原始設計目標是一種小型的、簡單的動態語言,與 Java 有足夠的類似性,使得使用者(尤爲是 Java 程序員)能夠快速上手。
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。
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 委員會計劃,之後每一年發佈一個 ECMAScript 的版本,下一個版本在2016年發佈,稱爲」ECMAScript 2016」,2017年發佈「ECMAScript 2017」,以此類推。
JavaScript 伴隨着互聯網的發展一塊兒發展。互聯網周邊技術的快速發展,刺激和推進了 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 的超集,這意味着全部 JavaScript 程序,均可以不經修改地在 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,在瀏覽器運行。