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、读取文件或更新数据库之类的操作。必须传递一个回调函数,该函数在知道该操作的结果时执行。
当必须按顺序执行一系列嵌套的异步函数时,这可能会导致回调地狱。例如:
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中文网其他相关文章!