以下是 ECMAScript 2018(ES9) 的总结,用「概览 → 新特性一览 → 总结」的结构整理:
🧩 一、总体概览
ECMAScript 2018(ES9)在 2018 年 6 月完成标准化。 该版本重点强化异步迭代、Promise 生命周期收尾,以及对象展开与正则能力,让现代语法更贴近工程实践。 整体方向是打磨 ES6 以后的大特性,消除“语言已支持但细节还需打磨”的断层。
🚀 二、主要新特性一览
for await (const chunk of stream) {
consume(chunk);
}
允许在异步数据源(如网络流、文件流)上使用 for...of 风格遍历,搭配 async generator 构建按需数据管道。
fetchData()
.then(handle)
.catch(log)
.finally(() => spinner.hide());
为 Promise 增加必定执行的收尾逻辑,简化加载动画、资源释放等常见场景。
const { id, ...rest } = payload;
const next = { ...defaults, ...rest };
将数组的 ... 语法推广至对象,支持结构化解构与浅拷贝合并,成为 Redux、组件 props 等常见写法的基础。
const url = /(?<protocol>https?):\/\/(?<host>[^/]+)/;
url.exec('https://example.com').groups.host; // 'example.com'
让正则匹配结果更具语义,减少依赖数组索引的魔法数字。
/(?<=#)\w+/.exec('tag:#es2020')[0]; // 'es2020'
补齐主流正则引擎对向后匹配的支持,有利于精准提取格式化文本。
/\p{Emoji}/u.test('🎉'); // true
让正则可以按 Unicode 类别匹配(如 Emoji、脚本、数字),对多语种输入验证更友好。
/hello.world/s.test('hello\nworld'); // true
让 . 匹配包括换行在内的任意字符,避免使用 [\s\S] 这类低可读性的写法。
\u{2028}`仍然合法`;
修复早期实现无法处理孤立转义序列的问题,确保模板字符串语法与规范一致。
🧠 三、总结 类型 代表特性 影响 异步迭代 for await...of 支持流式场景下的现代语法 Promise 生命周期 Promise.prototype.finally() 封装加载、清理逻辑更直观 对象处理 对象 Rest/Spread 状态合并与解构更简洁 正则增强 命名捕获、断言、Unicode 属性、dotAll 文本解析表达力显著提升 规范一致 模板字符串修复 与规范保持一致,减少跨引擎差异
📌 整体意义: ECMAScript 2018 继续完善 ES6 时代的体验差异,把“社区约定俗成”的方案(对象展开、finally)纳入语言核心。 正则增强和异步迭代为 Node.js、前端工程的流式数据处理打开了更优雅的写法。