以下是 ECMAScript 2017(ES8) 的总结,依旧遵循「概览 → 新特性一览 → 总结」结构:

🧩 一、总体概览

ECMAScript 2017(ES8)于 2017 年 6 月发布。 这一版里“压轴”的 async/await 正式入列,配套补齐对象 API、字符串工具与共享内存原语。 核心目标是让异步流程像同步代码一样直观,并为多线程场景奠定基础。

🚀 二、主要新特性一览

  1. async / await
async function load() {
    const data = await fetchJSON('/api');
    return data.items;
}

让 Promise 链以同步风格书写,可读性与错误栈信息大幅提升,是现代 JS 异步的事实标准。

  1. Object.values() 与 Object.entries()
Object.values({ a: 1, b: 2 }); // [1, 2]
Object.entries({ a: 1, b: 2 }); // [['a', 1], ['b', 2]]

与 Object.keys() 形成闭环,便于遍历对象属性或与 Map/数组互转。

  1. String.prototype.padStart()/padEnd()
'5'.padStart(3, '0'); // '005'

内置补位函数,格式化数字、日期或对齐输出更方便。

  1. Object.getOwnPropertyDescriptors()
const clone = Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));

一次性获取对象所有自有属性的描述符,利于实现深克隆、mixins 等高级模式。

  1. Trailing commas in functions
function foo(
    first,
    second,
) {}

允许函数参数与调用列表末尾保留逗号,减少多行 diff 噪音,与对象/数组保持一致。

  1. SharedArrayBuffer 与 Atomics
const buffer = new SharedArrayBuffer(1024);
const view = new Int32Array(buffer);
Atomics.add(view, 0, 1);

引入共享内存和原子操作,为 Web Workers、Node.js Worker Threads 提供低层并发原语(后续因安全原因短暂冻结,现已恢复)。

🧠 三、总结 类型 代表特性 影响 异步流程 async/await Promise 时代的主力语法,读写同步化 对象遍历 Object.values()/entries() 对象-数组转换与遍历更顺手 字符串处理 padStart()/padEnd() 格式化输出无需自写 helper 元编程 Object.getOwnPropertyDescriptors() 实现克隆、装饰器等高级模式更简单 语法打磨 函数尾随逗号 保持代码 diff 清爽 并发基础 SharedArrayBuffer + Atomics 为多线程共享内存提供支撑

📌 整体意义: ECMAScript 2017 把 async/await 推向主流,让 JavaScript 异步开发体验跃迁。 同时补齐对象/字符串小工具与并发基础设施,使语言在前端、服务端都能写出更工程化的结构。