Skip to main content

ES2021

ES2021 带来了字符串的全局替换、新的 Promise 方法以及更简洁的赋值运算符。

1. 逻辑赋值操作符 (&&=, ||=, ??=)

结合了逻辑运算符和赋值运算符,让代码更加简练。

let a = 1;
let b = 0;

a ||= 2; // 等价于 a = a || 2 (a 仍为 1)
b ??= 3; // 等价于 b = b ?? 3 (b 变为 0,因为 b 不是 null/undefined)

2. String.prototype.replaceAll()

一次性替换字符串中所有匹配的子串。以前需要使用带 /g 标志的正则表达式。

const str = "apple apple apple";
console.log(str.replaceAll("apple", "orange")); // "orange orange orange"

3. Promise.any()

接收一个 Promise 数组,只要其中的任意一个 Promise 成功(fulfilled),就返回那个已经成功的 Promise。如果所有的 Promise 都失败(rejected),则返回一个特殊的 AggregateError 错误。

Promise.any([
fetch('/api/server1').catch(() => null),
fetch('/api/server2').catch(() => null)
]).then(firstSuccess => console.log(firstSuccess));

4. 数字分隔符 (Numeric Separators)

允许在数字字面量中使用下划线 _ 作为分隔符,使大数字更易读。引擎解析时会自动忽略这些下划线。

const billion = 1_000_000_000;
const bytes = 0xFF_FF_FF_FF;

5. WeakRef (弱引用)

允许创建一个对对象的弱引用。由于是弱引用,它不会阻止垃圾回收器(GC)回收该对象。可以使用 deref() 方法在对象被回收前获取该对象。这在缓存大型对象时非常有用,能有效避免内存泄漏。

let obj = { data: 'some data' };
const weakRef = new WeakRef(obj);

// 在某个时刻,如果你需要用到这个对象
const ref = weakRef.deref();
if (ref) {
console.log(ref.data);
} else {
console.log('对象已被垃圾回收');
}