以下是 ECMAScript 2018(ES9) 的总结,用「概览 → 新特性一览 → 总结」的结构整理:

🧩 一、总体概览

ECMAScript 2018(ES9)在 2018 年 6 月完成标准化。 该版本重点强化异步迭代、Promise 生命周期收尾,以及对象展开与正则能力,让现代语法更贴近工程实践。 整体方向是打磨 ES6 以后的大特性,消除“语言已支持但细节还需打磨”的断层。

🚀 二、主要新特性一览

  1. 异步迭代(Async Iteration)
for await (const chunk of stream) {
    consume(chunk);
}

允许在异步数据源(如网络流、文件流)上使用 for...of 风格遍历,搭配 async generator 构建按需数据管道。

  1. Promise.prototype.finally()
fetchData()
    .then(handle)
    .catch(log)
    .finally(() => spinner.hide());

为 Promise 增加必定执行的收尾逻辑,简化加载动画、资源释放等常见场景。

  1. 对象 Rest / Spread 属性
const { id, ...rest } = payload;
const next = { ...defaults, ...rest };

将数组的 ... 语法推广至对象,支持结构化解构与浅拷贝合并,成为 Redux、组件 props 等常见写法的基础。

  1. 正则表达式命名捕获组
const url = /(?<protocol>https?):\/\/(?<host>[^/]+)/;
url.exec('https://example.com').groups.host; // 'example.com'

让正则匹配结果更具语义,减少依赖数组索引的魔法数字。

  1. 正则反向断言(Lookbehind)
/(?<=#)\w+/.exec('tag:#es2020')[0]; // 'es2020'

补齐主流正则引擎对向后匹配的支持,有利于精准提取格式化文本。

  1. Unicode 属性转义(\p{...})
/\p{Emoji}/u.test('🎉'); // true

让正则可以按 Unicode 类别匹配(如 Emoji、脚本、数字),对多语种输入验证更友好。

  1. 正则 dotAll 标志(/s)
/hello.world/s.test('hello\nworld'); // true

让 . 匹配包括换行在内的任意字符,避免使用 [\s\S] 这类低可读性的写法。

  1. 模板字面量限制放宽(Template Literal Revision)
\u{2028}`仍然合法`;

修复早期实现无法处理孤立转义序列的问题,确保模板字符串语法与规范一致。

🧠 三、总结 类型 代表特性 影响 异步迭代 for await...of 支持流式场景下的现代语法 Promise 生命周期 Promise.prototype.finally() 封装加载、清理逻辑更直观 对象处理 对象 Rest/Spread 状态合并与解构更简洁 正则增强 命名捕获、断言、Unicode 属性、dotAll 文本解析表达力显著提升 规范一致 模板字符串修复 与规范保持一致,减少跨引擎差异

📌 整体意义: ECMAScript 2018 继续完善 ES6 时代的体验差异,把“社区约定俗成”的方案(对象展开、finally)纳入语言核心。 正则增强和异步迭代为 Node.js、前端工程的流式数据处理打开了更优雅的写法。