ES2021新特性

1,090 阅读2分钟

刚进入2021年,ES2021也出来了,这次又带来了哪些有趣的特性呢?让我们一起来了解下。提案

String.prototype.replaceAll()

如果要用replace()替换全部的字符串需要使用正则。

let str = "mike name is mike";
let str2 = str.replace(/mike/g, "fake"); 
console.log(str2); // "fake name is fake"

现在可以用String.prototype.replaceAll()替换全部字符串而不需要使用正则。

let str = "mike name is mike";
let str3 = str.replaceAll('mike', "fake"); // 第一个参数为正则也可以:/mike/或/mike/g
console.log(str3); // "fake name is fake"

Promise.any()

当有任何一个promise状态变为成功(fulfilled),就返回。当全部promise都rejected,抛出一个AggregateError错误。

const p1 = new Promise((resolve, reject) => {
  setTimeout(() => resolve("p1"), 100);
});
const p2 = new Promise((resolve, reject) => {
  setTimeout(() => resolve("p2"), 200);
});
const p3 = new Promise((resolve, reject) => {
  setTimeout(() => resolve("p3"), 300);
});
Promise.any([p1, p2, p3]).then(first => {
// 任何一个promise完成(fulfilled),就返回
  console.log(first)
}).catch(error => {
// 全部promise都rejected,抛出一个AggregateError错误
  console.log(error)
})

类似api

名字描述
Promise.allSettled不会短路ES2020
Promise.all当有一个rejected就短路ES2015
Promise.race当有一个rejected或fulfilled就短路ES2015
Promise.any当有一个fulfilled就短路ES2021

WeakRefs

MDN👈 WeakRef对象包含对对象的弱引用。对象的弱引用是指当该对象应该被GC(garbage collector)回收时不会阻止GC的回收行为。最好避免使用。

const obj = new WeakRef({
	name: 'mark'
})
console.log(obj.deref().name) // "mark"

WeakRef.prototype.deref()返回WeakRef所绑定的对象。

Logical Assignment Operators

逻辑赋值运算符,目的是提供简洁的写法。

a ||= b;
// 等效于以下两种写法
// a || (a = b); a为falsy时执行右边
// if(!a) a = b;

a &&= b;
// 等效于以下两种写法
// a && (a = b); a为truth时执行右边
// if(a) a = b

a ??= b;
// 等效于以下两种写法
// a ?? (a = b); a为undefined或null时执行右边
// if(a === nudefined || a === null) a = b;

其中??运算符只有左边是undefinednull才返回右边。

undefined ?? 1 // 1
null ?? 1 // 1
false ?? 1 // false
0 ?? 1 // 0
"" ?? 1 // ""
NaN ?? 1 // NaN
2 ?? 1 // 2

Numeric Separators

数字分隔符_(下划线),增加数字可读性。

let fee = 123_00;
console.log(fee); // 12300
let fee = 12_300;
console.log(fee); // 12300