Skip to content

ECMAScript 2023

ECMAScript 2023(ES14)于 2023 年 6 月发布。

核心特性

1. 反向数组搜索方法

  • findLast()
  • findLastIndex()

从数组末尾向前搜索符合条件的元素,避免手动反转数组的冗余操作。

javascript
const arr = [5, 12, 8, 130, 44];
console.log(arr.findLast((n) => n > 10)); // 44
console.log(arr.findLastIndex((n) => n > 10)); // 4(索引)

2. 不可变数组方法

新增四个方法,返回新数组而不修改原数组,适用于函数式编程和状态管理:

  • toReversed():返回反转后的新数组。
  • toSorted(compareFn):返回排序后的新数组。
  • toSpliced(start, deleteCount, ...items):增删元素并返回新数组。
  • with(index, value):替换指定索引的值并返回新数组。
javascript
const arr = [1, 2, 3];
console.log(arr.toReversed()); // [3, 2, 1]
console.log(arr.toSorted((a, b) => b - a)); // [3, 2, 1]
console.log(arr.with(1, 99)); // [1, 99, 3]

3. Hashbang 语法标准化

支持在脚本文件首行使用 #! 指定解释器路径,便于直接执行:

javascript
#!/usr/bin/env node
console.log("Hello from Node.js!");

4. WeakMap 支持 Symbol 键

允许 Symbol 作为 WeakMap 的键,增强内存管理灵活性:

javascript
const key = Symbol("metadata");
const weakMap = new WeakMap();
weakMap.set(key, { data: "secret" });
console.log(weakMap.get(key)); // { data: 'secret' }

5. 错误链式传递(Error.cause)

通过 cause 属性传递原始错误信息,便于调试:

javascript
try {
  throw new Error("原始错误");
} catch (err) {
  throw new Error("新错误", { cause: err });
  // 通过 error.cause 获取原始错误
}

6. Object.hasOwn()

替代 Object.prototype.hasOwnProperty.call(),更安全地检测属性是否存在:

javascript
const obj = { name: "Alice" };
console.log(Object.hasOwn(obj, "name")); // true
console.log(Object.hasOwn(null, "name")); // false(不会报错)

7. Intl.ListFormat

国际化增强,按语言环境格式化列表:

javascript
const formatter = new Intl.ListFormat("zh-CN", {
  style: "long",
  type: "conjunction",
});
console.log(formatter.format(["苹果", "香蕉", "橙子"]));
// 输出:“苹果、香蕉和橙子”

兼容性

Chrome 97+
Firefox 104+
Safari 15.4+
Edge 97+
Node 16.0+

注:兼容性数据可能随着版本的更新而有所调整,建议开发者根据项目的具体需求参考最新的浏览器版本和 Polyfill 支持情况。

总结

ES2023 聚焦于 数据操作安全性、语法标准化 和 国际化支持。

参考文献

ECMA-262 2023 规范 👉

Released under the MIT License.