首頁 >web前端 >js教程 >ES2017中的新功能:異步功能,改進的對像等等

ES2017中的新功能:異步功能,改進的對像等等

William Shakespeare
William Shakespeare原創
2025-02-15 12:33:12897瀏覽

What’s new in ES2017: Async functions, improved objects and more

ES2017 (ECMAScript 2017) 為 JavaScript 引入了多項重要更新,本文將重點介紹這些更新,並簡要概述其更新流程。

核心要點

  • 異步函數 (Async functions): 允許像編寫同步代碼一樣編寫基於 Promise 的異步代碼。所有現代瀏覽器(IE 和 Opera Mini 除外)和 Node.js 7.6 都支持此功能。
  • 對象處理的新方法: 包括 Object.values()Object.entries()Object.getOwnPropertyDescriptors()。大多數現代瀏覽器和 Node.js 7.0 都支持這些方法。
  • 字符串填充方法 (.padStart() 和 .padEnd()): 簡化字符串格式化。所有現代瀏覽器(IE 除外)和 Node.js 8.0 都支持。
  • 允許尾隨逗號: 在對象定義、數組聲明、函數參數列表等中允許尾隨逗號。所有瀏覽器和 Node.js 都支持。函數參數中的尾隨逗號在撰寫本文時僅在 Chrome 58 和 Firefox 52 中受支持。

更新流程

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 規模很小,旨在驗證標準化流程。添加了兩個新功能:

  1. 數組的 .includes() 方法,當數組中包含某個值時返回 true 或 false。
  2. 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn