JavaScript ES2021 中又有哪些变化?
作为现在最流行的编程语言之一,JavaScript 的发展历程一直在不断地发展。为了更好地支持现代应用程序,JavaScript 从 ES6 开始就在一定程度上进行了改进和升级。随着 ES2021 的发布,已有不少新功能和语言特性推出,让我们一起来了解一下吧!
1. String replaceAll 方法
在过去的版本中,JavaScript 提供了 String.replace 方法以用新的值替换字符串中匹配某个模式的一次出现。但是这个方法只会替换第一个匹配项,而不是所有的。很多情况下我们需要替换所有匹配项,而非一次一个,这时 replaceAll 就应运而生。
它与 replace 方法类似,唯一的区别是它会替换所有匹配的值,而不仅仅是第一个。下面是一个简单的例子:
const str = 'The quick brown fox jumps over the lazy dog';
console.log(str.replaceAll('the', 'a'));
// expected output: "The quick brown fox jumps over a lazy dog"2. Promise.any 方法
ES2021 中引入了 Promise.any 方法,它可以接受一个 Promise 对象数组并返回其中任何一个 Promise 对象的解决或拒绝结果。如果所有 Promise 对象都被拒绝,则该方法将以一个 AggregateError 对象作为拒绝结果返回。
下面是一个基本的用法示例:
// www.javascriptcn.com code example
const promises = [
fetch('/endpoint-1').then(response => response.json()),
fetch('/endpoint-2').then(response => response.json()),
fetch('/endpoint-3').then(response => response.json())
];
Promise.any(promises).then(result => {
console.log(result);
}).catch(error => {
console.log(error);
});3. 数字分隔符
新加入的数字分隔符允许开发人员使用 _ 符号作为数字的分隔符,增加数字的可读性,不影响数字本身的值。
const million = 1_000_000; const billion = 1_000_000_000; const trillion = 1_000_000_000_000;
4. 逻辑赋值运算符
ES2021 引入了三个逻辑赋值运算符,即 ||=, ??= 和 &&=。它们允许开发人员在代码中进行简单的逻辑运算和赋值操作。
// www.javascriptcn.com code example let a; a ||= 'foo'; console.log(a); // "foo" let b = null; b ??= 'bar'; console.log(b); // "bar" let c = 10; c &&= 5; console.log(c); // 5
5. WeakRefs 和 Finalizers
新特性 WeakRefs 和 Finalizers 是 ES2021 中比较复杂的部分,让我们先了解一下它们的作用:
WeakRefs允许我们跟踪弱引用对象,当该对象被垃圾回收时可以即时通知我们。这个新特性对于应对内存泄漏问题非常有用。Finalizers是由WeakRefs触发的回调函数,在定义了它们的对象被垃圾回收时会立即调用。
下面是一个使用 WeakRefs 和 Finalizers 的简单示例:
// www.javascriptcn.com code example
let obj = {
name: 'John Doe',
age: 30
};
let weakRef = new WeakRef(obj);
let finalizationGroup = new FinalizationGroup(function (iterable) {
console.log(iterable);
});
finalizationGroup.register(obj, 'hi');
setTimeout(function () {
obj = null;
// 触发垃圾回收
gc();
// 控制台上会打印一个 FinalizationRegistryWeakRef 实例对象
}, 10);到此为止,上述新特性的介绍就告一段落了。这些变化使得 JavaScript 语言更加强大和易用,也为开发者提供了更加高效的工作方式。
关于这些新特性,我们应该在实战中不断实践和探究,使其在实际应用中发挥出最大的效用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d6ba4ba941bf7134c95375