你了解JavaScript ES2021的新特性吗?

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.any() 。如果所有的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;
} 
复制代码

这些运算符使赋值更容易,而无需使用条件语句。

猜你喜欢

转载自juejin.im/post/7078655273925083167