以下是 ES12 (ECMAScript 2021) 中一些重要特性的总结,包括逻辑操作符、数字分隔符、字符串的 replaceAll
、FinalizationRegistry
的用法及使用场景,使用 Markdown 格式呈现:
ES12 (ECMAScript 2021) 特性总结
1. 逻辑操作符 (&&=
, ||=
, ??=
)
描述
ES12 引入了三个新的逻辑赋值操作符:
&&=
:逻辑与赋值。||=
:逻辑或赋值。??=
:逻辑空值合并赋值。
这些操作符用于简化条件赋值操作。
语法
x &&= y; // 等价于 x = x && y;
x ||= y; // 等价于 x = x || y;
x ??= y; // 等价于 x = x ?? y;
示例
// 逻辑与赋值 (&&=)
let a = 1;
a &&= 2; // a = 1 && 2 → a = 2// 逻辑或赋值 (||=)
let b = 0;
b ||= 2; // b = 0 || 2 → b = 2// 逻辑空值合并赋值 (??=)
let c = null;
c ??= 3; // c = null ?? 3 → c = 3
使用场景
- 简化条件赋值操作,使代码更简洁。
2. 数字分隔符 (_
)
描述
数字分隔符 _
允许在数字字面量中使用下划线来提高可读性。
语法
const number = 1_000_000;
示例
const billion = 1_000_000_000;
const pi = 3.141_592_653_589;
使用场景
- 提高大数字或复杂数字的可读性。
3. 字符串的 replaceAll
描述
replaceAll
方法用于替换字符串中所有匹配的子字符串。
语法
str.replaceAll(searchValue, replaceValue);
示例
const str = "Hello, world! world!";
const newStr = str.replaceAll("world", "JavaScript");console.log(newStr); // "Hello, JavaScript! JavaScript!"
使用场景
- 需要替换字符串中所有匹配的子字符串时。
4. FinalizationRegistry
描述
FinalizationRegistry
提供了一种机制,用于在对象被垃圾回收时执行清理操作。
语法
const registry = new FinalizationRegistry(heldValue => {// 清理操作
});registry.register(target, heldValue);
示例
const registry = new FinalizationRegistry(heldValue => {console.log(`Cleaning up: ${heldValue}`);
});let obj = {};
registry.register(obj, "some value");obj = null; // 当 obj 被垃圾回收时,会触发清理操作
使用场景
- 需要在对象被垃圾回收时执行一些清理操作,如释放资源。
总结
特性 | 描述 | 使用场景 |
---|---|---|
逻辑操作符 (&&= , ` | =, ??=`) | |
数字分隔符 (_ ) | 提高数字字面量的可读性 | 提高大数字或复杂数字的可读性 |
字符串的 replaceAll | 替换字符串中所有匹配的子字符串 | 需要替换字符串中所有匹配的子字符串时 |
FinalizationRegistry | 在对象被垃圾回收时执行清理操作 | 需要在对象被垃圾回收时执行一些清理操作,如释放资源 |