ES12 是 ECMAScript 的最新版本,也称为 ECMAScript 2021。该版本在 2021 年 6 月正式发布,带来了一些新的语言特性和增强功能,本文将对这些新特性进行详细解析。
1. Promise.any()
Promise.any() 方法接受一个 Promise 数组,只要其中任何一个 Promise 对象变为 fulfilled 状态,该方法就会返回该 Promise 的值。如果所有 Promise 对象都变为 rejected 状态,则该方法会返回一个 AggregateError 对象,其中包含所有 Promise 的 rejection 原因。
-- -------------------- ---- ------- ----- -------- - - --------------------- ---- ------------------------ ---- --------------------- ---- ------------------------ --- -- --------------------- ------------ -- -------------------- -- ------- - ------------ -- -------------------- -- --------------- --- -------- ---- --------展开代码
在上面的示例中,Promise.any() 方法返回了第二个 Promise 对象的值,因为它是第一个变为 fulfilled 状态的 Promise 对象。如果所有 Promise 对象都被拒绝,则会抛出一个 AggregateError 对象,其中包含所有拒绝原因。
2. WeakRef 和 FinalizationRegistry
WeakRef 和 FinalizationRegistry 是两个新的类,用于更有效地管理内存。
WeakRef 类允许您创建一个弱引用对象,该对象不会阻止被引用对象被垃圾回收器回收。当被引用对象被回收时,弱引用对象将返回 undefined。
let obj = { name: 'John' }; const weakRef = new WeakRef(obj); obj = null; console.log(weakRef.deref()); // undefined
在上面的示例中,obj 对象被赋值为 null,因此它没有任何引用。当垃圾回收器运行时,它会回收 obj 对象,因此 weakRef.deref() 方法返回 undefined。
FinalizationRegistry 类允许您在对象被垃圾回收时运行一些代码。可以使用 register() 方法来注册一个对象和一个回调函数,当对象被回收时,回调函数将被调用。
const registry = new FinalizationRegistry((value) => { console.log(`${value} has been finalized`); }); let obj = { name: 'John' }; registry.register(obj, 'obj'); obj = null;
在上面的示例中,当 obj 对象被垃圾回收时,回调函数将被调用,输出 "obj has been finalized"。
3. String.prototype.replaceAll()
String.prototype.replaceAll() 方法允许您使用新的字符串替换所有匹配的子字符串。
const str = 'Hello, world!'; console.log(str.replaceAll('o', '0')); // Hell0, w0rld!
在上面的示例中,所有的 "o" 字符都被替换为 "0" 字符。
4. Logical Assignment Operators
ES12 引入了三个逻辑赋值运算符:&&=、||= 和 ??=。这些运算符允许您在变量上执行逻辑运算和赋值操作。
let x = 5; x &&= 3; console.log(x); // 3 let y = null; y ??= 'default value'; console.log(y); // 'default value'
在上面的示例中,&&= 运算符将变量 x 与 3 进行逻辑 AND 运算,并将结果赋值给 x。??= 运算符将变量 y 与 'default value' 进行逻辑 OR 运算,并将结果赋值给 y。
5. Numeric Separators
ES12 允许在数字中使用下划线作为分隔符,以提高数字的可读性。
const number = 1_000_000; console.log(number); // 1000000
在上面的示例中,数字 1000000 使用下划线进行分隔,以提高可读性。
结论
ES12 引入了一些新的语言特性和增强功能,这些功能可以帮助开发人员更有效地编写 JavaScript 代码。在实际开发中,您可以根据需要选择使用这些新特性,以提高代码的可读性、可维护性和性能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/677c7d585c5a933a3434e621