ES2021 带来了很多令人兴奋的新特性,这些特性可以提高我们的代码效率和可靠性。在本文中,我们将介绍 ES2021 中新增的八个特性。如果你还没有使用这些新特性,那么这篇文章将是一个不错的起点,让你了解并掌握它们。
1. String.prototype.replaceAll
String.prototype.replaceAll 是一个全局替换函数,它允许你通过正则表达式或字符串来替换指定的字符。相比 String.prototype.replace,它更加方便易用。
const str = "hello world"; const newStr = str.replaceAll("o", "a"); // "hella warld"
2. Promise.any
Promise.any 是 Promise.all 的一个小变种,它返回一个由最快的 Promise 解决或拒绝的结果。如果所有 Promise 都拒绝,则会返回一个 AggregateError,其中包含所有拒绝原因。
Promise.any([ Promise.resolve(1), Promise.reject("Error 1"), Promise.resolve(2), Promise.reject("Error 2"), ]).then((result) => console.log(result)); // 1
3. WeakRefs
WeakRefs 允许你在 JavaScript 中引用一个对象,但不会阻止垃圾回收器回收该对象。这意味着它可以帮助你避免内存泄漏的问题。
let obj = { prop: "value" }; const ref = new WeakRef(obj); obj = null; // 引用被解除,但垃圾回收器不会立即回收 let anotherObj = ref.deref(); // 获得原始对象
4. Logical Assignment Operators
ES2021 引入了逻辑赋值运算符,例如 &&=、||= 和 ??=。它们可以将一些计算结果与变量进行比较并赋值。
let a = { prop: "valueA" }; let b = null; a.prop &&= "newValueA"; // a.prop 将被赋值为 "newValueA" b ||= { prop: "valueB" }; // b 被赋值为一个新对象 { prop: "valueB" } let c = null; c ??= "valueC"; // c 将被赋值为 "valueC"
5. Numeric Separators
Numeric Separators 允许你在数字之间使用下划线,这使得数字更加易于理解和阅读。
const billion = 1_000_000_000; const binary = 0b1010_0011; const hex = 0xff_aa_33;
6. Logical nullish Assignment Operators
Logical nullish Assignment Operators 是在逻辑运算符上添加了一个新的符号,它是 ??=。这个运算符在变量为 null 或 undefined 时才进行赋值。
let obj = { prop: "value" }; let prop = null; prop ??= obj.prop; // prop 被赋值为 "value" obj.prop = null; prop ??= obj.prop; // prop 被保持为原始值,即 "value"
7. ArrayBuffer.transfer
ArrayBuffer.transfer 允许你将 ArrayBuffer 重新分配给更大或更小的 ArrayBuffer,并同时复制数据。这是一项非常方便的功能,可以在处理大量二进制数据时提高效率。
let bytes = new Int8Array([1, 2, 3]).buffer; bytes = ArrayBuffer.transfer(bytes, 6); // 扩展 buffer new Int8Array(bytes); // [1, 2, 3, 0, 0, 0] bytes = ArrayBuffer.transfer(bytes, 3); // 缩小 buffer new Int8Array(bytes); // [1, 2, 3]
8. Promise.prototype.finally
Promise.prototype.finally 是 Promise 链中的一个方法,它接受一个回调函数,在 Promise 无论成功或失败时都会被调用。如果你需要在 Promise 执行结束时运行一些最终逻辑,那么 Promise.prototype.finally 函数非常实用。
Promise.resolve("success") .finally(() => console.log("finally done")) .then((result) => console.log(result)); Promise.reject("error") .finally(() => console.log("finally done")) .catch((error) => console.log(error));
结论
ES2021 中新增的这八个特性都非常实用,在你的日常开发中都有很好的应用场景。通过掌握它们,你可以提高你的代码效率和可靠性。希望这篇文章能够帮助你更好地理解和运用它们。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674e8615e884a3e30f27e9d4