国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
階段 0:Strawman(雛形)
階段 1:Proposal(提案)
階段 2:Draft(草案)
階段 3:Candidate(候選)
階段 4:Finished(完成)
ES2018
Array.prototype.includes
指數(shù)運算符
異步函數(shù)
字符串填充方法
異步迭代器
對象展開和剩余屬性
ES6 和 ES2015 的主要區(qū)別是什么?
為什么將 ES6 重命名為 ES2015?
ES6/ES2015 中引入了哪些關(guān)鍵特性?
ES6/ES2015 如何改進 JavaScript 編碼?
如何在我的 JavaScript 代碼中開始使用 ES6/ES2015 特性?
ES6/ES2015 是否存在任何兼容性問題?
JavaScript 和 ECMAScript 之間有什么區(qū)別?
ES6/ES2015 之后 JavaScript 的未來如何?
TypeScript 與 ES6/ES2015 的關(guān)系如何?
使用 ES6/ES2015 比使用早期版本的 JavaScript 有什么好處?
首頁 web前端 js教程 ES6(ES2015)及以后:了解JavaScript版本

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

Feb 15, 2025 pm 12:13 PM

ES6 (ES2015) and Beyond: Understanding JavaScript Versioning

近年來,JavaScript 的發(fā)展可謂風(fēng)起云涌。每年都有新的 ECMAScript 規(guī)范發(fā)布,這使得 JavaScript 的版本管理、各個版本的功能支持以及如何編寫面向未來的代碼變得容易混淆。

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

關(guān)鍵要點

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

JavaScript 版本管理的早期歷史

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

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

ECMAScript 的誕生

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

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

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

ECMAScript 2015 和年度發(fā)布的復(fù)興

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

  • Promise
  • 箭頭函數(shù)
  • ES 模塊
  • 生成器和迭代器

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

TC39 過程

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

階段 0:Strawman(雛形)

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

階段 1:Proposal(提案)

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

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

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

階段 2:Draft(草案)

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

階段 3:Candidate(候選)

在此,提案的大部分內(nèi)容和支持技術(shù)已經(jīng)開發(fā)完成,但需要來自用戶和實現(xiàn)者(例如瀏覽器廠商)的進一步反饋。一旦獲得并采取行動,概要和規(guī)范細節(jié)將由指定的審閱者和指定的編輯最終確定和簽字。由于此階段需要符合的實現(xiàn),因此此后只接受關(guān)鍵更改。

階段 4:Finished(完成)

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

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

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

展望未來

在完成 ES2015 和建立 TC39 的 JavaScript 版本管理和更新過程之后,后續(xù)版本每年六月發(fā)布,提案的包含時間限制為一年。在撰寫本文時,已經(jīng)有三個新的規(guī)范。

ES2016

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

Array.prototype.includes

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

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

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

指數(shù)運算符

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

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

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

ES2017

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

異步函數(shù)

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

// Promise
const getProfile = name => {
  return fetch(`https://some-api/people/${name}`)
    .then(res => res.json())
    .then(({ profile }) => profile); // 從解析的對象中解構(gòu) `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) 將分別在字符串的開頭和結(jié)尾重復(fù)添加 padder(這是可選的,默認為空格),直到達到 length 個字符:

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

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

ES2018

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

異步迭代器

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

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

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

對象展開和剩余屬性

表面上看,由于 Babel 等編譯器的可用性,這兩個語法改進在 JavaScript 開發(fā)人員中已經(jīng)很流行。對象展開和剩余屬性類似于數(shù)組展開和剩余屬性,并允許淺復(fù)制和對象屬性的分組解構(gòu):

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

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

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

結(jié)語

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

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

關(guān)于 JavaScript 版本管理的常見問題解答:ES6 和 ES2015

ES6 和 ES2015 的主要區(qū)別是什么?

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

為什么將 ES6 重命名為 ES2015?

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

ES6/ES2015 中引入了哪些關(guān)鍵特性?

ES6/ES2015 為 JavaScript 引入了許多新特性,包括用于變量聲明的 letconst、用于更短函數(shù)語法的箭頭函數(shù)、用于字符串插值的模板字面量、用于面向?qū)ο缶幊痰念?、用于異步編程?Promise 以及用于代碼組織的模塊等等。

ES6/ES2015 如何改進 JavaScript 編碼?

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

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

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

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

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

JavaScript 和 ECMAScript 之間有什么區(qū)別?

JavaScript 是一種最初由 Netscape 開發(fā)的編程語言。ECMAScript 是由 ECMA 國際標準化的 JavaScript 標準版本。JavaScript 實現(xiàn) ECMAScript,這意味著它遵循 ECMAScript 標準中定義的規(guī)則和結(jié)構(gòu)。

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

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

TypeScript 與 ES6/ES2015 的關(guān)系如何?

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

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

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

以上是ES6(ES2015)及以后:了解JavaScript版本的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應(yīng)法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

如何在JS中與日期和時間合作? 如何在JS中與日期和時間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時間處理需注意以下幾點:1.創(chuàng)建Date對象有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時間信息可用get和set方法,注意月份從0開始;3.手動格式化日期需拼接字符串,也可使用第三方庫;4.處理時區(qū)問題建議使用支持時區(qū)的庫,如Luxon。掌握這些要點能有效避免常見錯誤。

為什么要將標簽放在的底部? 為什么要將標簽放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

什么是在DOM中冒泡和捕獲的事件? 什么是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個階段,捕獲是從頂層向下到目標元素,冒泡是從目標元素向上傳播到頂層。1.事件捕獲通過addEventListener的useCapture參數(shù)設(shè)為true實現(xiàn);2.事件冒泡是默認行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委托,提高動態(tài)內(nèi)容處理效率;5.捕獲可用于提前攔截事件,如日志記錄或錯誤處理。了解這兩個階段有助于精確控制JavaScript響應(yīng)用戶操作的時機和方式。

如何減少JavaScript應(yīng)用程序的有效載荷大??? 如何減少JavaScript應(yīng)用程序的有效載荷大小? Jun 26, 2025 am 12:54 AM

如果JavaScript應(yīng)用加載慢、性能差,問題往往出在payload太大,解決方法包括:1.使用代碼拆分(CodeSplitting),通過React.lazy()或構(gòu)建工具將大bundle拆分為多個小文件,按需加載以減少首次下載量;2.移除未使用的代碼(TreeShaking),利用ES6模塊機制清除“死代碼”,確保引入的庫支持該特性;3.壓縮和合并資源文件,啟用Gzip/Brotli和Terser壓縮JS,合理合并文件并優(yōu)化靜態(tài)資源;4.替換重型依賴,選用輕量級庫如day.js、fetch

JavaScript模塊上的確定JS綜述:ES模塊與COMPORJS JavaScript模塊上的確定JS綜述:ES模塊與COMPORJS Jul 02, 2025 am 01:28 AM

ES模塊和CommonJS的主要區(qū)別在于加載方式和使用場景。1.CommonJS是同步加載,適用于Node.js服務(wù)器端環(huán)境;2.ES模塊是異步加載,適用于瀏覽器等網(wǎng)絡(luò)環(huán)境;3.語法上,ES模塊使用import/export,且必須位于頂層作用域,而CommonJS使用require/module.exports,可在運行時動態(tài)調(diào)用;4.CommonJS廣泛用于舊版Node.js及依賴它的庫如Express,ES模塊則適用于現(xiàn)代前端框架和Node.jsv14 ;5.雖然可混合使用,但容易引發(fā)問題

如何在node.js中提出HTTP請求? 如何在node.js中提出HTTP請求? Jul 13, 2025 am 02:18 AM

在Node.js中發(fā)起HTTP請求有三種常用方式:使用內(nèi)置模塊、axios和node-fetch。1.使用內(nèi)置的http/https模塊無需依賴,適合基礎(chǔ)場景,但需手動處理數(shù)據(jù)拼接和錯誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請求;2.axios是基于Promise的第三方庫,語法簡潔且功能強大,支持async/await、自動JSON轉(zhuǎn)換、攔截器等,推薦用于簡化異步請求操作;3.node-fetch提供類似瀏覽器fetch的風(fēng)格,基于Promise且語法簡單

編寫清潔和可維護的JavaScript代碼的最佳實踐是什么? 編寫清潔和可維護的JavaScript代碼的最佳實踐是什么? Jun 23, 2025 am 12:35 AM

要寫出干凈、可維護的JavaScript代碼,應(yīng)遵循以下四點:1.使用清晰一致的命名規(guī)范,變量名用名詞如count,函數(shù)名用動詞開頭如fetchData(),類名用PascalCase如UserProfile;2.避免過長函數(shù)和副作用,每個函數(shù)只做一件事,如將更新用戶信息拆分為formatUser、saveUser和renderUser;3.合理使用模塊化和組件化,如在React中將頁面拆分為UserProfile、UserStats等小組件;4.寫注釋和文檔時點到為止,重點說明關(guān)鍵邏輯、算法選

垃圾收集如何在JavaScript中起作用? 垃圾收集如何在JavaScript中起作用? Jul 04, 2025 am 12:42 AM

JavaScript的垃圾回收機制通過標記-清除算法自動管理內(nèi)存,以減少內(nèi)存泄漏風(fēng)險。引擎從根對象出發(fā)遍歷并標記活躍對象,未被標記的則被視為垃圾并被清除。例如,當對象不再被引用(如將變量設(shè)為null),它將在下一輪回收中被釋放。常見的內(nèi)存泄漏原因包括:①未清除的定時器或事件監(jiān)聽器;②閉包中對外部變量的引用;③全局變量持續(xù)持有大量數(shù)據(jù)。V8引擎通過分代回收、增量標記、并行/并發(fā)回收等策略優(yōu)化回收效率,降低主線程阻塞時間。開發(fā)時應(yīng)避免不必要的全局引用、及時解除對象關(guān)聯(lián),以提升性能與穩(wěn)定性。

See all articles