ES2017 (ECMAScript 2017) 為 JavaScript 引入了多項重要更新,本文將重點介紹這些更新,並簡要概述其更新流程。
核心要點
Object.values()
、Object.entries()
和 Object.getOwnPropertyDescriptors()
。大多數現代瀏覽器和 Node.js 7.0 都支持這些方法。 更新流程
JavaScript (ECMAScript) 標準不斷發展,由眾多廠商在多個平台上實現。 ES6 (ECMAScript 2015) 歷時六年才最終完成,規模龐大。為了簡化流程并快速添加新功能,制定了新的年度發布流程。
技術委員會 39 (TC39) 由瀏覽器廠商等參與者組成,他們遵循嚴格的流程推進 JavaScript 的提案:
階段 0:構想 (strawman) – 對新的或改進的 ECMAScript 功能的初步構想。
階段 1:提案 (proposal) – 由至少一名 TC39 成員倡導的正式提案文件,包括 API 示例、語言語義、算法、潛在障礙、polyfill 和演示。
階段 2:草案 (draft) – 功能規範的初始版本。需要兩個實驗性實現,其中一個可以在 Babel 等轉譯器中實現。
階段 3:候選 (candidate) – 對提案規范進行審查,並收集廠商的反饋。
階段 4:完成 (finished) – 提案已準備好包含在 ECMAScript 中。只有達到此階段的功能才被認為是標準。但是,在瀏覽器和 Node.js 等運行時中,它的發布可能需要更長時間。
ES2016 規模很小,旨在驗證標準化流程。添加了兩個新功能:
.includes()
方法,當數組中包含某個值時返回 true 或 false。 a ** b
冪運算符,與 Math.pow(a, b)
相同。 ES2017 的新功能
ES2017 (或舊稱 ES8) 被認為是對 ECMAScript 規範的第一次適當修訂。它提供了以下功能……
異步函數
與大多數語言不同,JavaScript 默認情況下是異步的。可能需要任意時間的命令不會停止執行。這包括諸如請求 URL、讀取文件或更新數據庫之類的操作。必須傳遞一個回調函數,該函數在知道該操作的結果時執行。
當必須按順序執行一系列嵌套的異步函數時,這可能會導致回調地獄。例如:
<code class="language-javascript">function doSomething() { doSomething1((response1) => { doSomething2(response1, (response2) => { doSomething3(response2, (response3) => { // etc... }; }); }); }</code>
ES2015 (ES6) 引入了 Promise,它提供了一種更清晰的方式來表達相同的功能。一旦你的函數被 Promisify,它們就可以使用以下方式執行:
<code class="language-javascript">function doSomething() { doSomething1() .then(doSomething2) .then(doSomething3) }</code>
ES2017 異步函數擴展了 Promise,使異步調用更加清晰:
<code class="language-javascript">async function doSomething() { const response1 = await doSomething1(), response2 = await doSomething2(response1), response3 = await doSomething3(response2); }</code>
await
有效地使每個調用看起來像是同步的,同時不會佔用 JavaScript 的單一處理線程。
異步函數在所有現代瀏覽器(IE 和 Opera Mini 除外)和 Node.js 7.6 中受支持。它們將改變你編寫 JavaScript 的方式,並且可以專門撰寫一篇關於回調、Promise 和異步函數的文章。
Object.values()
、Object.entries()
、Object.getOwnPropertyDescriptors()
、.padStart()
和 .padEnd()
以及尾隨逗號的說明與原文類似,在此不再贅述。
SharedArrayBuffer 和 Atomics
SharedArrayBuffer 對像用於表示固定長度的原始二進制數據緩衝區,可以在 Web Worker 之間共享。 Atomics 對象提供了一種可預測的方式來讀取和寫入由 SharedArrayBuffer 定義的內存位置。
雖然 Chrome 和 Firefox 都實現了這兩個對象,但在 2018 年 1 月由於 Spectre 漏洞而被禁用。
完整的 ECMAScript 2017 語言規範可在 ECMA 國際網站上找到。
ES2017 常見問題解答 (FAQ)
(FAQ 部分與原文類似,在此不再贅述,可以根據需要選擇性保留或改寫。)
以上是ES2017中的新功能:異步功能,改進的對像等等的詳細內容。更多資訊請關注PHP中文網其他相關文章!