ECMAScript 2021 推出了一些有趣且强大的功能,如果你使用其他语言,一定会对这些特性觉得熟悉。
1.Replace All
replaceAll() 可以在不使用正则表达式的情况下替换字符串中指定的所有字符,有两个参数:初始字符串、需要替换的字符串。
案例如下:
let str = ‘JavaScript’;
console.log(myStr.replaceAll(“a”, “v”)); //output: JvvvScript
2.Numeric Separators
数字分隔符 是 ES2021 中引入的有用特性之一。它们通过使用下划线 _ 提供数字之间的分隔,使在 JavaScript 中读取大数变得更容易。
案例如下:
let num = 1_000_000;
console.log(num); //output: 1000000
使长数字更加清晰可读。
3.Promise Any
Promise.any()
将一组 Promise 作为参数。一旦可迭代对象内的任意一个
promise
变成了兑现状态,返回第一个已解决的 Promise。如果所有的Promise都被拒绝,返回错误。
案例如下:
const promise1 = new Promise((resolve, reject) => {
resolve(‘promise1 was resolved.’);
});
const promise2 = new Promise((resolve, reject) => {
resolve(‘promise2 was resolved.’);
});
const promise3 = new Promise((resolve, reject) => {
resolve(‘promise3 was resolved.’);
});
let result = Promise.any([promise1, promise2, promise3]);
console.log(result); //output: promise1 was resolved.
上述案例中Promise.any() 返回了 promise1,因为是第一个被解决的。如果所有的Promise都被拒绝,会返回一个包含拒绝原因的 AggregateError。
4.Weak Reference
WeakRef()用于保存对另一个对象的弱引用,这意味着它不会阻止垃圾收集器收集该对象。当我们不想将对象永远保存在内存中时,它很有用。
创建一个新的 WeakRef ,传递一个对象作为 WeakRef() 的参数,然后在弱引用上调用 deref() 来读取引用。
案例如下:
const object = new WeakRef({
name: ‘John’,
age: 25
});
//取object
console.log(object.deref()); //output: {name: “John”, age: 25}
//取name.
console.log(object.deref().name); //output: John
5.Logical Assignment Operators
ES2021 引入了三个有用的逻辑赋值运算符: &&= 、 ||= 和 ??= 。
逻辑赋值运算符 &&= 用于两个值之间。如果第一个值是真的,第二个值将被分配给它。
案例如下:
let firstNumber = 5;
let secondNumber = 20;
firstNumber &&= secondNumber; //output: 20
console.log(firstNumber); //output: 20
//上述代码等价于
if(firstNumber){
firstNumber = secondNumber;
}
逻辑赋值运算符 ||= 也用于两个值之间。如果第一个值不是true(false),则分配第二个值。
案例如下:
let firstNumber = null;
let secondNumber = 10;
firstNumber ||= secondNumber; //output: 10
console.log(firstNumber); //output: 10
//上述代码等价于
if(!firstNumber){
firstNumber = secondNumber;
}
逻辑赋值运算符 ??= 检查第一个值是否为空或未定义。如果是,则分配第二个值。
案例如下:
//当第一个值为 null 或为 undefined 时
let firstNumber = null;
let secondNumber = 10;
firstNumber ??= secondNumber; //output: 10
console.log(firstNumber); //output: 10
//当第一个值为true时
firstNumber = 9;
firstNumber ??= secondNumber; //output: 9
console.log(firstNumber); //output: 9
//上述代码等价于
if(firstNumber == null || firstNumber == undefined){
firstNumber = secondNumber;
}
这些运算符使赋值更容易,而无需使用条件语句。