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

ES6(ES2015)及以後:了解JavaScript版本

William Shakespeare
發布: 2025-02-15 12:13:11
原創
217 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板