ECMAScript日常总结–ES2021(ES12)
文章目录
1. 数字分隔符
允许在数字字面量中使用下划线(_
)进行分隔,提高数字的可读性。
const A = 1_000_000_000;
const B = 0b1010_0001_0010;
const C = 0xA0_B0_C0;
console.log(A) // 1000000000
console.log(B) //2578
console.log(C) //10531008
2. 逻辑或赋值(||=)
逻辑或赋值运算符 ||=
用于将一个变量赋值给另一个变量,但仅当左侧的变量为 falsy(假值)时才执行赋值操作。这有助于简化代码,特别是在需要检查并设置默认值的情况下。
// 语法:左侧变量 ||= 右侧表达式;
let x = 1;
x ||= 2;
console.log(x); // 输出 1,因为 x 不是 falsy
let y = 0;
y ||= 3;
console.log(y); // 输出 3,因为 y 是 falsy
逻辑或赋值运算符的使用场景之一是在设置默认值时:
function greet(name) {
name ||= 'XXX';
console.log(`Hello, ${name}!`);
}
greet('ABC'); // 输出 "Hello, ABC!"
greet(); // 输出 "Hello, XXX!",因为没有传递 name 参数,所以使用默认值 'XXX'
如果 name
参数为 falsy,就会使用逻辑或赋值运算符将默认值 'Guest'
赋给 name
。
逻辑或赋值运算符是一个短路运算符,即如果左侧的表达式是 truthy,右侧的表达式将不会被执行。这有助于避免不必要的计算。
3. String.prototype.replaceAll()
该方法允许通过替换所有匹配的子字符串来更新字符串。以前,String.replace()
方法只替换第一个匹配项。
const originalString = "A B A D";
const newString = originalString.replaceAll("A", "E");
console.log(newString); // "E B E D"
4. Promise.any()
Promise.any()
方法接收一个Promise数组,一旦数组中的任何一个Promise被解决(fulfilled),它就会返回该Promise的值。如果所有Promise都被拒绝(rejected),则返回一个聚合错误。
const promises = [
fetch('https://api.example.com/data1'),
fetch('https://api.example.com/data2'),
fetch('https://api.example.com/data3')
];
Promise.any(promises)
.then(result => console.log(result))
.catch(error => console.log(error));
5. Promise.prototype.finally()
finally方法在Promise被解决(fulfilled)或拒绝(rejected)后执行指定的回调函数,无论Promise的状态如何。
fetch('https://api.example.com/data')
.then(response => response.json())
.finally(() => console.log('请求完成,无论成功或失败'));