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 聚焦于 数据操作安全性、语法标准化 和 国际化支持。
参考文献