简述ECMASript 12 新特性 ?
ECMAScript 2021,也称为ECMAScript 12,继续为JavaScript语言引入新的特性和改进,进一步增强了开发者的编程体验。以下是ECMAScript 2021的一些主要新特性:
1. String.prototype.replaceAll()
- 描述: 允许在字符串中替换所有匹配的子串,而不仅仅是第一个匹配项。
-
示例:
const string = 'foofoo'; console.log(string.replaceAll('foo', 'bar')); // 输出: 'barbar'
2. Promise.any()
- 描述: 接受一个Promise可迭代对象,一旦其中的任何一个promise成功,就返回那个已经成功的promise的结果。
-
示例:
const promises = [ Promise.reject('ERROR A'), Promise.reject('ERROR B'), Promise.resolve('success') ]; Promise.any(promises).then(value => console.log(value)); // 输出: 'success'
3. Logical Assignment Operators(逻辑赋值运算符)
- 描述: 结合了逻辑运算符和赋值运算符,包括逻辑与赋值(
&&=
)、逻辑或赋值(||=
)和逻辑空值赋值(??=
)。 -
示例:
let a = 1; let b = null; a &&= 2; console.log(a); // 输出: 2 b ||= 5; console.log(b); // 输出: 5 b ??= 10; console.log(b); // 输出: 5
4. Numeric Separators
- 描述: 允许在数值字面量中使用下划线(
_
)作为数字分隔符,提高了大数值的可读性。 -
示例:
const number = 1_000_000_000; console.log(number); // 输出: 1000000000
5. WeakRef
- 描述: 提供了一种方式来保持对一个对象的弱引用,而不阻止该对象被垃圾回收。
-
示例:
let obj = new WeakRef({ a: 1 }); console.log(obj.deref()?.a); // 输出: 1
6. FinalizationRegistry
- 描述: 允许你注册一个回调函数,该回调函数会在对象被垃圾回收时执行。
-
示例:
let registry = new FinalizationRegistry(value => { console.log(`注册的对象被回收了,注册值为:${value}`); }); registry.register({}, 'some value');
ECMAScript 2021的这些新特性继续丰富了JavaScript的表达能力和功能,特别是在字符串处理、异步编程、代码可读性和内存管理方面。这些改进有助于开发者编写更高效、更简洁、更健壮的代码。