ES12 (ES2021) 中新增了哪些特性?

推荐答案

ES12(ES2021)中新增了以下特性:

  1. String.prototype.replaceAll
    允许替换字符串中所有匹配的子字符串,而不仅仅是第一个匹配项。

  2. Promise.any
    接受一个 Promise 数组,返回第一个成功解析的 Promise 结果。如果所有 Promise 都被拒绝,则抛出一个 AggregateError。

  3. 逻辑赋值运算符
    新增了 &&=||=??= 逻辑赋值运算符,简化了条件赋值操作。

  4. WeakRefs
    允许创建对对象的弱引用,不会阻止垃圾回收器回收对象。

  5. FinalizationRegistry
    允许在对象被垃圾回收时执行清理操作。

  6. 数字分隔符
    允许在数字中使用下划线 _ 作为分隔符,提高可读性。

  7. Intl.ListFormat
    提供了一种格式化列表的方式,支持多种语言和地区。

  8. Intl.DateTimeFormat 的 dateStyle 和 timeStyle 选项
    允许更简单地格式化日期和时间。


本题详细解读

1. String.prototype.replaceAll

在 ES12 之前,String.prototype.replace 只能替换第一个匹配的子字符串。如果需要替换所有匹配项,必须使用正则表达式并加上全局标志 g。ES12 引入了 replaceAll 方法,可以直接替换所有匹配项。

2. Promise.any

Promise.any 接受一个 Promise 数组,并返回第一个成功解析的 Promise 结果。如果所有 Promise 都被拒绝,则抛出一个 AggregateError,其中包含所有拒绝的原因。

-- -------------------- ---- -------
----- -------- - -
  --------------------- ----
  ------------------------ ----
  --------------------- ---
--

---------------------
  ------------ -- -------------------- -- --- -------- --
  ------------ -- --------------------

3. 逻辑赋值运算符

ES12 引入了三个新的逻辑赋值运算符:&&=||=??=,用于简化条件赋值操作。

  • &&=:仅在左侧值为真时赋值。
  • ||=:仅在左侧值为假时赋值。
  • ??=:仅在左侧值为 nullundefined 时赋值。

4. WeakRefs

WeakRef 允许创建对对象的弱引用,这意味着即使对象被弱引用,垃圾回收器仍然可以回收该对象。这在某些场景下非常有用,比如缓存。

5. FinalizationRegistry

FinalizationRegistry 允许在对象被垃圾回收时执行清理操作。这对于管理资源或执行一些清理任务非常有用。

6. 数字分隔符

ES12 允许在数字中使用下划线 _ 作为分隔符,以提高数字的可读性。

7. Intl.ListFormat

Intl.ListFormat 提供了一种格式化列表的方式,支持多种语言和地区。

8. Intl.DateTimeFormat 的 dateStyle 和 timeStyle 选项

Intl.DateTimeFormat 新增了 dateStyletimeStyle 选项,允许更简单地格式化日期和时间。

纠错
反馈