以下是 ECMAScript 2019(ES10) 的总结,用你之前喜欢的格式「概览 → 新特性一览 → 总结」:

🧩 一、总体概览

ECMAScript 2019(ES10)在 2019 年 6 月发布。 本次更新聚焦在补齐日常开发中的“缺少的小工具”,让对象、数组、字符串处理更顺滑,也补强 JSON 与排序等底层行为的一致性。 整体走向是“把社区常用的 polyfill 与最佳实践写进标准”,降低跨平台兼容成本。

🚀 二、主要新特性一览

  1. Array.prototype.flat() / flatMap()
[1, [2, [3]]].flat(2); // [1, 2, 3]
[1, 2, 3].flatMap(x => [x, x * 2]); // [1, 2, 2, 4, 3, 6]

简化数组拍平与映射的组合写法,尤其适合处理嵌套列表、树状数据。

  1. Object.fromEntries()
const pairs = new Map([['name', 'ES10'], ['year', 2019]]);
Object.fromEntries(pairs); // { name: 'ES10', year: 2019 }

提供与 Object.entries() 相反的转换,提高 Map / URLSearchParams 与普通对象之间的互操作性。

  1. String.prototype.trimStart() / trimEnd()
'  hello  '.trimStart(); // 'hello  '
'  hello  '.trimEnd();   // '  hello'

让去除字符串前后空白更加语义化,避免手写正则或重复调用 trim()。

  1. 可选的 catch 绑定(Optional Catch Binding)
try {
    doSomething();
} catch {
    recover();
}

当错误对象不会被使用时可省略 catch(error) 形参,使异步/同步错误处理更简洁。

  1. Symbol.prototype.description
const tag = Symbol('loader');
tag.description; // 'loader'

为调试与日志提供统一的符号描述读取方式,避免访问 Symbol#toString() 的兼容差异。

  1. JSON.stringify() 输出保证为合法 UTF-8
JSON.stringify('\u2028'); // "\u2028"

修复某些 Unicode 分隔符导致的无效 JSON,利于日志聚合与跨语言解析。

  1. JSON 字符串正式支持行分隔符(JSON Superset)
eval('"line\u2028break"'); // 旧环境错误,ES10 起合法

确保 JavaScript 解析器接受 JSON 中的 U+2028/U+2029,保持与 JSON 规范一致。

  1. Array.prototype.sort() 稳定排序
[{ n: 1, id: 'a' }, { n: 1, id: 'b' }].sort((a, b) => a.n - b.n);
// 顺序保持为 a, b

明确规定排序算法必须稳定,避免不同引擎下对等关键字排序顺序不一致。

🧠 三、总结 类型 代表特性 影响 数组操作 flat(), flatMap() 减少手写递归或二次遍历 对象互转 Object.fromEntries() Map/entries 互转一步到位 字符串处理 trimStart()/trimEnd() 常规清洗字符串更语义化 错误处理 可选 catch 绑定 控制流语法更精炼 规范一致 JSON 修复、稳定排序、Symbol 描述 提升调试与跨平台兼容性

📌 整体意义: ECMAScript 2019 把“社区普遍 Polyfill”纳入标准库,让现代 JavaScript 写法开箱即用。 它兼顾工程团队日常的对象/数组转换,又照顾底层规范的一致性,为后续的大型特性铺路。