刚进入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;
其中??运算符只有左边是undefined或null才返回右边。
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