ECMAScript 2021(ES12)

2025-02-20 20:00
2025-02-23 08:30
450

核心特性

1. String.prototype.replaceAll()

替换字符串中所有匹配的子串,无需使用正则表达式,简化全局替换操作,避免手动转义正则特殊字符。

javascript
      const str = "apple,orange,apple";
const newStr = str.replaceAll("apple", "banana");
console.log(newStr); // 'banana,orange,banana'

    

2. Promise.any()

返回第一个成功解决的 Promise,仅当所有 Promise 都失败时才抛出 AggregateError,常用多源请求择优(如 CDN 资源择优加载)。

javascript
      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 时赋值。
javascript
      // 设置默认值
let config = {};
config.timeout ??= 30; // config.timeout 为 undefined,赋值 30

// 条件执行
let isEnabled = true;
isEnabled &&= checkFeatureFlag(); // 仅在 isEnabled 为 true 时更新

    

4. 数字分隔符(Numeric Separators _)

在数字中使用下划线提高可读性,不影响数值。

javascript
      const billion = 1_000_000_000; // 10 亿
const hex = 0xa0_b0_c0; // 十六进制
const binary = 0b1010_0001_1000; // 二进制

    

5. WeakRef 与 FinalizationRegistry

  • WeakRef:创建对对象的弱引用,不阻止垃圾回收。
  • FinalizationRegistry:注册回调函数,在对象被回收时触发。
javascript
      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
总结