ES12,也称为 ECMAScript 2021,是 JavaScript 语言的最新标准,于 2021 年 6 月发布。本文将深入解析 ES12 的新特性,并提供相关示例代码和指导意义。
String.prototype.replaceAll
ES12 引入了 String.prototype.replaceAll
方法,该方法可以在字符串中全局替换指定的子字符串。
const str = 'hello world'; const newStr = str.replaceAll('l', '!'); console.log(newStr); // 'he!!o wor!d'
在此之前,我们通常使用正则表达式和 replace
方法来实现全局替换。
const str = 'hello world'; const newStr = str.replace(/l/g, '!'); console.log(newStr); // 'he!!o wor!d'
但是,使用正则表达式的方式存在一些问题。例如,如果要替换的子字符串中包含正则表达式中的特殊字符,就需要对其进行转义,而 replaceAll
方法则不需要。
Promise.any
Promise.any
方法接收一个 Promise 实例数组,返回其中最先解决的 Promise 实例的结果。
const promise1 = Promise.reject('error 1'); const promise2 = Promise.resolve('result 2'); const promise3 = Promise.reject('error 3'); Promise.any([promise1, promise2, promise3]).then(result => { console.log(result); // 'result 2' }).catch(error => { console.log(error); // AggregateError: All promises were rejected });
如果所有 Promise 实例都被拒绝,Promise.any
方法会抛出一个 AggregateError
异常,其中包含所有 Promise 实例的拒因。
WeakRef 和 FinalizationRegistry
WeakRef
和 FinalizationRegistry
是 ES12 中新增的两个全局类,用于处理 JavaScript 中的垃圾回收。
WeakRef
可以创建一个弱引用,当被引用的对象被垃圾回收时,弱引用会自动失效。
const obj = { name: 'Tom' }; const ref = new WeakRef(obj); console.log(ref.deref()); // { name: 'Tom' } obj = null; console.log(ref.deref()); // undefined
FinalizationRegistry
可以监听被垃圾回收的对象,并在其被回收时执行一些清理操作。
const registry = new FinalizationRegistry((value) => { console.log(`${value.name} is garbage collected`); }); let obj = { name: 'Tom' }; registry.register(obj, obj); obj = null;
数字分隔符
ES12 允许在数字字面量中使用 _
作为分隔符,以提高数字的可读性。
const num = 1_000_000; console.log(num); // 1000000
总结
ES12 引入了很多实用的特性,包括全局替换字符串、最先解决的 Promise、弱引用和清理操作、数字分隔符等,这些特性可以提高开发效率和代码可读性,值得开发者们学习和使用。
以上是对 ES12 的详细解析,希望本文能够对读者有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65fc04c7d10417a222790053