[譯] JavaScript 簡史

JavaScript 簡史

JavaScript 的起源以及這些年的發展狀況javascript

大約十年前[1],Jeff Atwood(Stackoverflow 創始人)斷言 JavaScript 將會是將來的方向,並創造了 「Atwood 定律」:任何可使用 Javascript 編寫的程序,最終都會由 Javascript 編寫。十年後的今天,這個斷言相比以前更加可信了。JavaScript 的應用範圍不斷擴大。前端

JavaScript 發佈

JavaScript 最初由 NetScape 的 Brendan Eich 創造,並在 1995 年 Netscape 的聞稿中首次發佈。它有着非同尋常的命名歷史:首先由創造者命名爲 Mocha,接着被重命名爲 LiveScript。1996 年,在發佈大約一年以後,NetScape 但願可以蹭蹭 Java 社區的熱度(雖然 JavaScript 與 Java 毫無關係),所以決定再將其重命名爲 JavaScript,併發布了支持 JavaScript 的 Netscape 2.0 瀏覽器。java

ES一、ES2 和 ES3

1996 年,Netscape 決定將 JavaScript 提交到 ECMA 國際,指望將其標準化。第 1 版標準規範在 1997 年發佈,同時該語言也被標準化了。在首次發佈以後,ECMAScript 的標準化工做持續進行,不久以後,發佈了兩個新的版本:1998 年的 ECMAScript 2 和 1999 年的 ECMAScript 3。android

十年沉寂和 ES4

1999 年發佈 ES3 以後,官方標準出現了十年的沉寂,這期間沒有任何變化。第 4 版標準起初有一些進展,部分被討論的特性有類、模塊、靜態類型、解構等等。它原本定在 2008 年發佈,可是因爲關於語言複雜度的不一樣政治意見[2]而被廢棄。可是,瀏覽器廠商不停引入語言的擴展,這讓開發者大傷腦筋 —— 他們只能添加 polyfill[3] 來解決不一樣瀏覽器之間的兼容性問題。ios

從沉寂到 ES5

Google、Microsoft、Yahoo 和其他 ES4 的爭論者最終走到了一塊兒,決定在 ES3 之上創造一個小範圍的更新,並暫時命名爲 ES3.1。可是整個團隊仍舊關於 ES4 該包含什麼內容而爭論不休。終於,在 2009 年,ES5 發佈了,主要修復了兼容性和安全問題等。可是它並無翻起多大浪花 —— 通過了數年時間後瀏覽器廠商才徹底遵循了相關標準,許多開發者在不知道 「現代」 標準的狀況下依舊使用 ES3。git

ES6 —— ECMASript 2015 發佈

在 ES5 發佈數年以後,事情開始有了起色。TC39(ECMA 國際之下負責 ECMAScript 標準化的委員會)持續進行下一版本的標準化的工做,該版本的 ECMAScript(ES6)起初命名爲 ES Harmony[4],在最終發佈時被命名爲 ES2015。ES2015 添加了許多重要的特性和語法糖以便於編寫複雜的程序。部分 ES6 提供的特性包括了類、模塊、箭頭函數、增強的對象字面量、模板字符串、解構、默認參數 + Rest 參數 + Spread 操做符、Let 和 Const 語法、異步迭代器 + for..of、生成器、集合 + 映射、Proxy、Symbol、Promise、math + number + string + array + object 的 API 等等[5]es6

瀏覽器對 ES6 的支持依舊十分有限,可是開發者只須要編寫 ES6 代碼並將其轉譯至 ES5,就可使用 ES6 的全部特性。隨着第 6 版 ECMAScript 的發佈,TC39 決定以每一年更新的模式來發布 ECMAScript 的更新,這樣新特性就能夠在經過時儘快地加入標準,不須要等待完整的規範起草和經過 —— 所以第 6 版 ECMAScript 在 2015 年 6 月發佈前,被命名爲 ECMAScript 2015 或 ES2015。而且以後的 ECMAScript 版本發佈定於每一年 6 月。github

ES7 —— ECMASript 2016 發佈

在 2016 年 6 月,第 7 版 ECMAScript 發佈了。因爲 ECMAScript 變成了年更模式,ECMAScript 2016(ES2016)相對來講沒有太多新內容。ES2016 只包含了兩個新特性:後端

  • 指數運算符 **
  • Array.prototype.includes

ES8 —— ECMAScript 2017 發佈

第 8 版 ECMAScript 在 2017 年 6 月發佈。ES8 主要的亮點在於增長了異步函數,如下是 ES8 新特性的列表:瀏覽器

  • Object.values()Object.entries()
  • 字符串填充 好比 String.prototype.padEnd()String.prototype.padStart()
  • Object.getOwnPropertyDescriptors
  • 在函數參數定義和函數調用中使用尾後逗號
  • 異步函數

什麼是 ESNext

ESNext 是一個動態的名字,指當前的 ECMAScript 版本。例如,在本文編寫的時候,ES2017ES8ESNext

將來會發生什麼

自從 ES6 發佈後,TC39 極大提升了他們的效率。 如今 TC39 以 Github 組織的形式運行,在上面有許多關於下一版的 ECMAScript 新特性和語法的提議。任何人均可以發起提議,所以開發者社區能夠更多地參與進來。在正式造成規範前,每一個提議都會通過四個發展階段

這差很少就是所有內容了,歡迎在評論區留下你的反饋。如下是原始語言規範的連接:ES6ES7ES8

  1. 譯者注:本文寫於 2017 年,因此十年前是 2007 年。↩︎
  2. 譯者注:技術層面的分歧以及商業政治都是 ES4 失敗的緣由,知乎上曾經有過相關的討論↩︎
  3. 譯者注:Web 開發中,polyfill 指用於實現瀏覽器並不支持的原生 API 的代碼。↩︎
  4. 譯者注:Harmony 有和諧,協調的意思。↩︎
  5. 譯者注:若是你感興趣,可使用這個中文教程學習這些特性。↩︎

若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索