ECMAScript 2021(ES12)
2025-02-20 20:00
2025-02-23 08:30
核心特性
1. String.prototype.replaceAll()
替换字符串中所有匹配的子串,无需使用正则表达式,简化全局替换操作,避免手动转义正则特殊字符。
const str = "apple,orange,apple";
const newStr = str.replaceAll("apple", "banana");
console.log(newStr); // 'banana,orange,banana'
2. Promise.any()
返回第一个成功解决的 Promise,仅当所有 Promise 都失败时才抛出 AggregateError,常用多源请求择优(如 CDN 资源择优加载)。
const promises = [fetch("https://fast-api.com/data"), fetch("https://backup-api.com/data")];
Promise.any(promises)
.then(data => useFastestResponse(data))
.catch(err => handleAllFailures(err.errors));
3. 逻辑赋值运算符(Logical Assignment Operators)
结合逻辑操作与赋值,简化条件更新变量的代码。
- ||=:左侧为假值时赋值。
- &&=:左侧为真值时赋值。
- ??=:左侧为 null/undefined 时赋值。
// 设置默认值
let config = {};
config.timeout ??= 30; // config.timeout 为 undefined,赋值 30
// 条件执行
let isEnabled = true;
isEnabled &&= checkFeatureFlag(); // 仅在 isEnabled 为 true 时更新
4. 数字分隔符(Numeric Separators _)
在数字中使用下划线提高可读性,不影响数值。
const billion = 1_000_000_000; // 10 亿
const hex = 0xa0_b0_c0; // 十六进制
const binary = 0b1010_0001_1000; // 二进制
5. WeakRef 与 FinalizationRegistry
- WeakRef:创建对对象的弱引用,不阻止垃圾回收。
- FinalizationRegistry:注册回调函数,在对象被回收时触发。
const registry = new FinalizationRegistry(heldValue => {
console.log(`${heldValue} 被回收`);
});
let obj = { data: "largeData" };
const weakRef = new WeakRef(obj);
registry.register(obj, "obj 实例");
obj = null; // 可能触发回收回调
总结
ECMAScript 2021(ES12)replaceAll 和 逻辑赋值运算符 显著提升了代码简洁性,Promise.any 强化了异步编程的灵活性,而 数字分隔符 和 稳定的排序 则优化了数据处理的体验。其特性广泛应用于文本处理、资源配置,进一步巩固了 JavaScript 在现代开发中的高效与实用。后续版本(如 ES2022 的类静态块)延续了对工程化需求的深度支持。
评论区
评论区寄了
文章目录
核心特性
1. String.prototype.replaceAll()
2. Promise.any()
3. 逻辑赋值运算符(Logical Assignment Operators)
4. 数字分隔符(Numeric Separators _)
5. WeakRef 与 FinalizationRegistry
总结