搜尋
首頁web前端js教程ES6(ES2015)及以後:了解JavaScript版本

ES6 (ES2015) and Beyond: Understanding JavaScript Versioning

近年來,JavaScript 的發展可謂風起雲湧。每年都有新的 ECMAScript 規範發布,這使得 JavaScript 的版本管理、各個版本的功能支持以及如何編寫面向未來的代碼變得容易混淆。

為了更好地理解這看似持續不斷的更新浪潮背後的原因,讓我們簡要回顧一下 JavaScript 及其版本的歷史,並了解標準化過程為何如此重要。

關鍵要點

  • ES6(也稱為 ES2015)標誌著 JavaScript 版本管理的重大轉變,引入了類、Promise、箭頭函數、ES 模塊、生成器和迭代器等特性。這是一個重要的基礎更新,為未來的年度小型 JavaScript 版本更新奠定了基礎。
  • ES2015 建立了基於提案的 TC39 過程,用於討論和採納新的語言特性。此過程包含五個階段:Strawman(雛形)、Proposal(提案)、Draft(草案)、Candidate(候選)、Finished(完成),每個階段都逐步規範化和實現所提出的特性。
  • ES2015 之後,後續版本每年六月發布,ES2016(ES7)和 ES2017(ES8)引入了增量特性和改進。 ES2018 引入了一些強大的新增功能,例如異步迭代器以及對象展開和剩餘屬性。
  • 將 ES6 重命名為 ES2015 是為了反映其發布年份,並擺脫版本號。此舉是為了避免混淆,並表明 JavaScript 是一種不斷更新和改進的動態語言。新的命名約定也有助於表明語言更新和改進的規律性。

JavaScript 版本管理的早期歷史

JavaScript 的原型於 1995 年 5 月由 Brendan Eich 在短短十天內編寫完成。他最初被招募來為 Netscape Navigator 實現 Scheme 運行時,但管理團隊推動使用一種 C 風格的語言來補充當時新發布的 Java。

JavaScript 於 1995 年 12 月在 Netscape Navigator 版本 2 中首次亮相。次年,微軟對 JavaScript 進行了逆向工程,創建了自己的版本,稱為 JScript。 JScript 與 Internet Explorer 瀏覽器版本 3 一起發布,幾乎與 JavaScript 完全相同——甚至包括所有相同的錯誤和怪癖——但它確實有一些額外的 Internet Explorer 獨有特性。

ECMAScript 的誕生

確保 JScript(以及任何其他變體)與 JavaScript 保持兼容的必要性促使 Netscape 和 Sun Microsystems 對該語言進行標準化。他們在歐洲計算機製造商協會(ECMA)的幫助下完成了這項工作,ECMA 將負責託管該標準。標準化後的語言被稱為 ECMAScript,以避免侵犯 Sun 的 Java 商標——此舉造成了相當多的混淆。最終,ECMAScript 用於指代規範,而 JavaScript(現在仍然如此)用於指代語言本身。

負責 JavaScript 版本管理和維護 ECMAScript 的工作組被稱為技術委員會 39,或 TC39。它由來自 Apple、Google、Microsoft 和 Mozilla 等所有主要瀏覽器廠商的代表組成,以及其他對 Web 發展感興趣的公司受邀的專家和代表。他們定期舉行會議,以決定該語言的發展方向。

當 JavaScript 於 1997 年由 TC39 標準化時,該規範被稱為 ECMAScript 版本 1。最初,ECMAScript 的後續版本每年發布一次,但由於缺乏共識以及 ECMAScript 4 周圍難以管理的大型功能集,最終變得零星。因此,該版本被終止並縮小到 3.1,但並未以該名稱最終確定,而是最終演變為 ECMAScript 5。它於 2009 年 12 月發布,距 ECMAScript 3 發布 10 年後,並引入了 JSON 序列化 API、Function.prototype.bind 和嚴格模式等功能。兩年後,發布了一個維護版本來澄清最新迭代 5.1 中的一些歧義。

ECMAScript 2015 和年度發布的複興

隨著 TC39 解決因 ECMAScript 4 導致的分歧,Brendan Eich 強調需要更短期、更小規模的發布。這些新的規範中的第一個是 ES2015(最初命名為 ECMAScript 6 或 ES6)。這個版本是一個龐大但必要的基石,為未來的年度 JavaScript 版本管理提供了支持。它包含許多當今許多開發人員都非常喜歡的特性,例如:

  • Promise
  • 箭頭函數
  • ES 模塊
  • 生成器和迭代器

ES2015 是第一個遵循 TC39 過程 的版本,這是一個基於提案的模型,用於討論和採納語言特性。

TC39 過程

在提案被接受到即將發布的 ECMAScript 版本之前,它必須經過五個階段。

階段 0:Strawman(雛形)

這是一個方便的步驟,允許向規範提交想法。任何人都可以提出特性建議——即註冊為貢獻者的 TC39 成員和非成員。

階段 1:Proposal(提案)

提案正式化的第一個階段。必須:

  • 描述該解決方案糾正的任何現有問題
  • 提供 API 概要,以及高級實現細節,以及 polyfill 和/或演示
  • 預先討論潛在的障礙

必須選擇一位 負責人 來採納和推進該提案。此人必須是 TC39 成員。

階段 2:Draft(草案)

這是該特性可能包含在 ECMAScript 未來版本中的里程碑。在此,使用規範描述的正式語言詳細說明提案的語法和語義。此時應該提供實驗性實現。

階段 3:Candidate(候選)

在此,提案的大部分內容和支持技術已經開發完成,但需要來自用戶和實現者(例如瀏覽器廠商)的進一步反饋。一旦獲得併採取行動,概要和規範細節將由指定的審閱者和指定的編輯最終確定和簽字。由於此階段需要符合的實現,因此此後只接受關鍵更改。

階段 4:Finished(完成)

該提案已被接受,可以添加到 ECMAScript 中。因此,它固有地:

  • 使用 JavaScript 編寫的 Test262 套件的一部分的驗收測試已被編寫,以證明該特性的符合性和行為
  • 至少有兩個符合的實現可用並已發布,所有這些都證明了其健壯性和開發人員可用性
  • 已向官方 ECMA-262 代碼庫提交拉取請求,並已獲得規範編輯的簽字。

上述代碼庫的貢獻文檔進一步詳細說明了使用 GitHub 問題和拉取請求來管理對語言的添加。

展望未來

在完成 ES2015 和建立 TC39 的 JavaScript 版本管理和更新過程之後,後續版本每年六月發布,提案的包含時間限制為一年。在撰寫本文時,已經有三個新的規範。

ES2016

也稱為 ES7,這是 ECMAScript 的第一個較小、增量版本。除了錯誤修復之外,它只添加了兩個特性。

Array.prototype.includes

此實例方法簡化了在數組中搜索值的操作:

// ES2016 之前:
const hasBob = names.indexOf('bob') > -1;

// ES2016:
const hasBob = names.includes('bob');

指數運算符

在 ES2016 之前,可以使用 Math.pow(base, exponent) 執行冪運算。此版本引入了一個運算符(**),它具有自己的優先級:

// ES2016 之前
Math.pow(5, 3); // => 125

// ES2016
5 ** 3; // => 125

ES2017

ES2017(又名 ES8)是一個稍大的版本,包含一些有用的方法和語法結構。

異步函數

Promise 已將我們從回調地獄中解救出來,但它們的 API 仍然表現出冗長。異步函數使用與同步代碼非常相似的語法對它們進行了抽象:

// Promise
const getProfile = name => {
  return fetch(`https://some-api/people/${name}`)
    .then(res => res.json())
    .then(({ profile }) => profile); // 从解析的对象中解构 `profile`
};

// async/await
const getProfile = async name => {
  const res = await fetch(`https://some-api/people/${name}`);
  const { profile } = await res.json();
  return profile;
};

字符串填充方法

String.prototype.padStart(length, padder) 和padEnd(length, padder) 將分別在字符串的開頭和結尾重複添加padder(這是可選的,默認為空格),直到達到length 個字符:

'foo'.padStart(6);          // => '   foo';
'foo'.padEnd(6);            // => 'foo   ';
'foo'.padStart(10, 'bar');  // => 'barbarbfoo';
'foo'.padEnd(10, 'bar');    // => 'foobarbarb';

其他特性包括尾隨逗號、共享內存和原子操作以及靜態對象方法(Object.entries()、Object.values() 和 Object.getOwnPropertyDescriptors())。

ES2018

在撰寫本文時,這個最新版本引入了一小部分強大的新增功能。

異步迭代器

雖然 Promise.all() 允許您等待多個 Promise 的解析,但在某些情況下,您可能需要順序迭代異步檢索的值。現在可以與 Promise 數組一起等待異步迭代器:

// ES2016 之前:
const hasBob = names.indexOf('bob') > -1;

// ES2016:
const hasBob = names.includes('bob');

對象展開和剩餘屬性

表面上看,由於 Babel 等編譯器的可用性,這兩個語法改進在 JavaScript 開發人員中已經很流行。對象展開和剩餘屬性類似於數組展開和剩餘屬性,並允許淺複製和對象屬性的分組解構:

// ES2016 之前
Math.pow(5, 3); // => 125

// ES2016
5 ** 3; // => 125

其他已接受的提案包括 Promise.prototype.finally(),以及對正則表達式和模板字面量的增強。

結語

JavaScript 在很短的時間內得到了極大的發展。雖然這歸功於 ECMAScript 標準和 TC39 的出色工作,但由於之前 JavaScript 版本管理和開發缺乏穩定性和凝聚力,這最初是一段艱辛的旅程。

由於提案過程相對成熟,該語言只能以務實和可控的方式改進。對於 Web 開發人員來說,這是一個偉大的時代!

關於 JavaScript 版本管理的常見問題解答:ES6 和 ES2015

ES6 和 ES2015 的主要區別是什麼?

ES6 和 ES2015 本質上是相同的。 ES6 是由 ECMA 國際標準化的 ECMAScript 編程語言的第六版。 ES2015 只是 ES6 的新名稱,反映了它發布的年份。重命名是為了反映發布年份並擺脫版本號,這可能會造成混淆。

為什麼將 ES6 重命名為 ES2015?

將 ES6 重命名為 ES2015 是為了反映其發布年份並擺脫版本號。此舉是為了避免混淆,並表明 JavaScript 是一種不斷更新和改進的動態語言。新的命名約定也有助於表明語言更新和改進的規律性。

ES6/ES2015 中引入了哪些關鍵特性?

ES6/ES2015 為JavaScript 引入了許多新特性,包括用於變量聲明的letconst、用於更短函數語法的箭頭函數、用於字符串插值的模板字面量、用於面向對象編程的類、用於異步編程的Promise 以及用於代碼組織的模塊等等。

ES6/ES2015 如何改進 JavaScript 編碼?

ES6/ES2015 通過多種方式改進 JavaScript 編碼。它引入了使該語言更強大且更易於使用的新語法和特性。例如,箭頭函數提供了更簡潔的函數編寫語法,而 Promise 使處理異步操作更容易。模塊的引入也有助於更好地組織代碼,使其更易於管理和維護。

如何在我的 JavaScript 代碼中開始使用 ES6/ES2015 特性?

要在 JavaScript 代碼中開始使用 ES6/ES2015 特性,您可以使用像 Babel 這樣的轉譯器,它將 ES6 代碼轉換為可在當前瀏覽器中運行的 ES5 代碼。您還可以使用像 Webpack 這樣的模塊打包器來管理和捆綁您的 JavaScript 模塊。

ES6/ES2015 是否存在任何兼容性問題?

雖然大多數現代瀏覽器都支持 ES6/ES2015 的大部分特性,但與舊版瀏覽器可能存在一些兼容性問題。為了確保兼容性,您可以使用 polyfill,它提供了您期望瀏覽器原生支持的功能。

JavaScript 和 ECMAScript 之間有什麼區別?

JavaScript 是一種最初由 Netscape 開發的編程語言。 ECMAScript 是由 ECMA 國際標準化的 JavaScript 標準版本。 JavaScript 實現 ECMAScript,這意味著它遵循 ECMAScript 標準中定義的規則和結構。

ES6/ES2015 之後 JavaScript 的未來如何?

ES6/ES2015 之後,JavaScript 將繼續發展,每年都會發布新版本,每個版本都會引入新的特性和改進。 JavaScript 的未來可能會看到更強大的特性、更好的性能以及跨不同平台和設備的更高兼容性。

TypeScript 與 ES6/ES2015 的關係如何?

TypeScript 是 JavaScript 的超集,它為該語言添加了靜態類型。它支持 ES6/ES2015 的所有特性,甚至包括 JavaScript 中找不到的一些附加特性。 TypeScript 代碼被轉譯為 JavaScript,因此它可以在任何 JavaScript 環境中運行。

使用 ES6/ES2015 比使用早期版本的 JavaScript 有什麼好處?

與早期版本的 JavaScript 相比,使用 ES6/ES2015 提供了許多好處。它引入了使該語言更強大且更易於使用的新語法和特性。它還改進了代碼組織和可維護性,並為複雜的應用程序和大型代碼庫提供了更好的支持。

以上是ES6(ES2015)及以後:了解JavaScript版本的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript數據類型:瀏覽器和nodejs之間是否有區別?JavaScript數據類型:瀏覽器和nodejs之間是否有區別?May 14, 2025 am 12:15 AM

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScript評論:使用//和 / * * / * / * /JavaScript評論:使用//和 / * * / * / * /May 13, 2025 pm 03:49 PM

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python vs. JavaScript:開發人員的比較分析Python vs. JavaScript:開發人員的比較分析May 09, 2025 am 12:22 AM

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

Python vs. JavaScript:選擇合適的工具Python vs. JavaScript:選擇合適的工具May 08, 2025 am 12:10 AM

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript:了解每個的優勢Python和JavaScript:了解每個的優勢May 06, 2025 am 12:15 AM

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

JavaScript的核心:它是在C還是C上構建的?JavaScript的核心:它是在C還是C上構建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript應用程序:從前端到後端JavaScript應用程序:從前端到後端May 04, 2025 am 12:12 AM

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

Python vs. JavaScript:您應該學到哪種語言?Python vs. JavaScript:您應該學到哪種語言?May 03, 2025 am 12:10 AM

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具