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 规模很小,旨在验证标准化流程。添加了两个新功能:
- 数组的
.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中文网其他相关文章!

JavaScript字符串替换方法详解及常见问题解答 本文将探讨两种在JavaScript中替换字符串字符的方法:在JavaScript代码内部替换和在网页HTML内部替换。 在JavaScript代码内部替换字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 该方法仅替换第一个匹配项。要替换所有匹配项,需使用正则表达式并添加全局标志g: str = str.replace(/fi

因此,在这里,您准备好了解所有称为Ajax的东西。但是,到底是什么? AJAX一词是指用于创建动态,交互式Web内容的一系列宽松的技术。 Ajax一词,最初由Jesse J创造

10款趣味横生的jQuery游戏插件,让您的网站更具吸引力,提升用户粘性!虽然Flash仍然是开发休闲网页游戏的最佳软件,但jQuery也能创造出令人惊喜的效果,虽然无法与纯动作Flash游戏媲美,但在某些情况下,您也能在浏览器中获得意想不到的乐趣。 jQuery井字棋游戏 游戏编程的“Hello world”,现在有了jQuery版本。 源码 jQuery疯狂填词游戏 这是一个填空游戏,由于不知道单词的上下文,可能会产生一些古怪的结果。 源码 jQuery扫雷游戏

本教程演示了如何使用jQuery创建迷人的视差背景效果。 我们将构建一个带有分层图像的标题横幅,从而创造出令人惊叹的视觉深度。 更新的插件可与JQuery 1.6.4及更高版本一起使用。 下载

本文演示了如何使用jQuery和ajax自动每5秒自动刷新DIV的内容。 该示例从RSS提要中获取并显示了最新的博客文章以及最后的刷新时间戳。 加载图像是选择

Matter.js是一个用JavaScript编写的2D刚体物理引擎。此库可以帮助您轻松地在浏览器中模拟2D物理。它提供了许多功能,例如创建刚体并为其分配质量、面积或密度等物理属性的能力。您还可以模拟不同类型的碰撞和力,例如重力摩擦力。 Matter.js支持所有主流浏览器。此外,它也适用于移动设备,因为它可以检测触摸并具有响应能力。所有这些功能都使其值得您投入时间学习如何使用该引擎,因为这样您就可以轻松创建基于物理的2D游戏或模拟。在本教程中,我将介绍此库的基础知识,包括其安装和用法,并提供一

本文讨论了在浏览器中优化JavaScript性能的策略,重点是减少执行时间并最大程度地减少对页面负载速度的影响。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

WebStorm Mac版
好用的JavaScript开发工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能