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 实现快速优先的异步逻辑