首页 > web前端 > js教程 > ES2017中的新功能:异步功能,改进的对象等等

ES2017中的新功能:异步功能,改进的对象等等

William Shakespeare
发布: 2025-02-15 12:33:12
原创
925 人浏览过

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、读取文件或更新数据库之类的操作。必须传递一个回调函数,该函数在知道该操作的结果时执行。

当必须按顺序执行一系列嵌套的异步函数时,这可能会导致回调地狱。例如:

function doSomething() {
  doSomething1((response1) => {
    doSomething2(response1, (response2) => {
      doSomething3(response2, (response3) => {
        // etc...
      };
    });
  });
}
登录后复制

ES2015 (ES6) 引入了 Promise,它提供了一种更清晰的方式来表达相同的功能。一旦你的函数被 Promisify,它们就可以使用以下方式执行:

function doSomething() {
  doSomething1()
  .then(doSomething2)
  .then(doSomething3)
}
登录后复制

ES2017 异步函数扩展了 Promise,使异步调用更加清晰:

async function doSomething() {
  const
    response1 = await doSomething1(),
    response2 = await doSomething2(response1),
    response3 = await doSomething3(response2);
}
登录后复制

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板