
ES12 (ES2021)新特性
文章类型:Javascript
发布者:hp
发布时间:2025-03-09
1:字符串 replaceAll 方法:用于替换所有匹配的子串。
const text = 'Hello world, world is round';
console.log(text.replaceAll('world', 'Earth'));
// 输出: 'Hello Earth, Earth is round'
2:逻辑赋值运算符 (&&=, ||=, ??=):结合逻辑运算符与赋值操作。
let x = 0;
x ||= 10; // x = 10(x 为假值时赋值)
let y = null;
y ??= '默认值'; // y = '默认值'
3:WeakRef 和 FinalizationRegistry:
WeakRef创建弱引用避免内存泄漏
FinalizationRegistry终结注册表,在对象被回收时触发回调。
let obj = { data: '重要数据' };
const weakRef = new WeakRef(obj);
const registry = new FinalizationRegistry(msg => console.log(msg));
registry.register(obj, '对象已被回收');
obj = null; // 可能触发回调输出:'对象已被回收'
4:Promise.any():返回第一个成功的Promise结果。若全部失败则抛出 AggregateError
const promises = [
Promise.reject('Error 404'),
Promise.resolve('Fastest'),
new Promise(resolve => setTimeout(() => resolve('Slow'), 100))
];
Promise.any(promises).then(console.log); // 输出: 'Fastest'
5:私有类属性 (Private Class Fields):使用 # 来定义私有属性。
class User {
#secretKey = '123456';
constructor(name) { this.name = name; }
#validate() { /* 内部方法 */ }
}
const user = new User('Tom');
console.log(user.#secretKey); // 报错: 私有字段不可访问
6:数值分隔符(_):在数字字面量中使用下划线提高可读性
const billion = 1_000_000_000;
console.log(billion === 1000000000); // true
7:数组排序稳定性:Array.prototype.sort 默认使用稳定排序(相同值保持原始顺序)
const users = [
{ name: 'Alice', age: 30 },
{ name: 'Bob', age: 25 },
{ name: 'Eve', age: 30 }
];
users.sort((a, b) => a.age - b.age);
// Alice 和 Eve 的 age 相同,排序后保持原顺序
1:先使用:replaceAll、逻辑赋值符提升代码简洁性。
2:慎用:WeakRef 需谨慎管理内存,避免滥用。
3:性能优化:利用 Promise.any 实现快速优先的异步逻辑