以下是 ES11(ECMAScript 2020)中一些重要特性的总结,包括 String.prototype.matchAll、BigInt、globalThis、空值合并运算符 ??、可选链操作符 ?. 等内容,以 Markdown 格式呈现:
ES11 (ECMAScript 2020) 特性总结
1. String.prototype.matchAll
描述
matchAll 方法返回一个迭代器,该迭代器包含字符串中所有与正则表达式匹配的结果及其捕获组。
语法
str.matchAll(regexp);
示例
const regex = /t(e)(st(\d?))/g;
const str = 'test1test2';
const matches = [...str.matchAll(regex)];
console.log(matches[0]); // ['test1', 'e', 'st1', '1']
console.log(matches[1]); // ['test2', 'e', 'st2', '2']
使用场景
- 需要提取字符串中所有匹配正则表达式的部分及其捕获组时。
2. BigInt
描述
BigInt 是一种新的数据类型,用于表示大于 2^53 - 1 的整数(即超过 JavaScript 中 Number 类型的最大安全整数)。
语法
const bigInt = BigInt(123456789012345678901234567890);
const bigIntLiteral = 123456789012345678901234567890n;
示例
const a = BigInt(Number.MAX_SAFE_INTEGER) + 1n;
console.log(a); // 9007199254740992n
注意事项
BigInt不能与Number直接混合运算。BigInt不支持无符号右移运算符>>>。
使用场景
- 处理大整数计算,如加密算法、大数运算等。
3. globalThis
描述
globalThis 提供了一种标准的方式来获取全局 this 对象,无论代码运行在浏览器、Node.js 还是其他环境中。
语法
globalThis;
示例
// 在浏览器中
console.log(globalThis === window); // true
// 在 Node.js 中
console.log(globalThis === global); // true
使用场景
- 编写跨平台的 JavaScript 代码时,统一访问全局对象。
4. 空值合并运算符 ??
描述
空值合并运算符 ?? 用于判断左侧的值是否为 null 或 undefined,如果是,则返回右侧的值;否则返回左侧的值。
语法
leftExpr ?? rightExpr;
示例
const foo = null ?? 'default';
console.log(foo); // 'default'
const bar = 0 ?? 'default';
console.log(bar); // 0
与 || 的区别
||会对左侧的值进行布尔值判断,如果为假值(如0、''、false等),则返回右侧的值。??只对null和undefined进行判断。
使用场景
- 需要区分
null/undefined和其他假值时。
5. 可选链操作符 ?.
描述
可选链操作符 ?. 用于安全地访问嵌套对象的属性或方法。如果某个属性不存在,则返回 undefined,而不会抛出错误。
语法
obj?.prop;
obj?.[expr];
obj?.method();
示例
const user = {
profile: {
name: 'Alice',
age: 25
}
};
console.log(user?.profile?.name); // 'Alice'
console.log(user?.address?.city); // undefined
使用场景
- 访问深层嵌套的对象属性时,避免因某个属性不存在而导致的错误。
总结
| 特性 | 描述 | 使用场景 |
|---|---|---|
String.prototype.matchAll | 返回所有正则匹配结果的迭代器 | 提取字符串中所有匹配正则表达式的部分及其捕获组 |
BigInt | 表示大整数的数据类型 | 处理大整数计算,如加密算法、大数运算等 |
globalThis | 提供标准方式获取全局 this 对象 | 编写跨平台的 JavaScript 代码时,统一访问全局对象 |
空值合并运算符 ?? | 判断左侧值是否为 null 或 undefined,是则返回右侧值 | 需要区分 null/undefined 和其他假值时 |
可选链操作符 ?. | 安全地访问嵌套对象的属性或方法 | 访问深层嵌套的对象属性时,避免因某个属性不存在而导致的错误 |