推荐答案
ES11(ES2020)中新增了以下特性:
- 可选链操作符(Optional Chaining):
?.
- 空值合并操作符(Nullish Coalescing Operator):
??
- 动态导入(Dynamic Import):
import()
- BigInt:支持大整数类型
- Promise.allSettled:返回所有 Promise 的结果,无论成功或失败
- globalThis:提供一种标准的方式来获取全局对象
- String.prototype.matchAll:返回所有匹配正则表达式的迭代器
- 模块命名空间导出(Module Namespace Exports):
export * as ns from 'module'
本题详细解读
1. 可选链操作符(Optional Chaining)?.
可选链操作符允许你在访问深层嵌套的对象属性时,不必明确验证每个引用是否有效。如果某个引用是 null
或 undefined
,表达式会短路并返回 undefined
,而不会抛出错误。
const user = { profile: { name: 'Alice' } }; console.log(user.profile?.name); // 'Alice' console.log(user.address?.street); // undefined
2. 空值合并操作符(Nullish Coalescing Operator)??
空值合并操作符用于在左侧的表达式为 null
或 undefined
时,返回右侧的默认值。与逻辑或操作符 ||
不同,??
仅在左侧为 null
或 undefined
时生效。
const value = null; console.log(value ?? 'default'); // 'default' console.log(0 ?? 'default'); // 0
3. 动态导入(Dynamic Import)import()
动态导入允许你在需要时异步加载模块,返回一个 Promise 对象。这对于代码分割和按需加载非常有用。
import('./module.js') .then(module => { module.doSomething(); }) .catch(err => { console.error('Failed to load module', err); });
4. BigInt
BigInt
是一种新的原始数据类型,用于表示大于 2^53 - 1
的整数。你可以通过在数字后面加 n
来创建一个 BigInt
。
const bigIntValue = 9007199254740991n; console.log(bigIntValue + 1n); // 9007199254740992n
5. Promise.allSettled
Promise.allSettled
方法返回一个 Promise,该 Promise 在所有给定的 Promise 都已解决(无论是成功还是失败)时解决。它返回一个对象数组,每个对象表示对应的 Promise 的结果。
-- -------------------- ---- ------- ----- -------- - - --------------------------- ----------------------- -- ---------------------------- ------------- -- - ---------------------- -- ---------------------------- ---
6. globalThis
globalThis
提供了一种标准的方式来访问全局对象,无论代码运行在浏览器、Node.js 还是其他环境中。
console.log(globalThis); // 在浏览器中是 window,在 Node.js 中是 global
7. String.prototype.matchAll
matchAll
方法返回一个迭代器,包含所有匹配正则表达式的结果。每个结果都是一个数组,包含匹配的字符串及其捕获组。
const regex = /t(e)(st(\d?))/g; const str = 'test1test2'; const matches = [...str.matchAll(regex)]; matches.forEach(match => console.log(match));
8. 模块命名空间导出(Module Namespace Exports)export * as ns from 'module'
模块命名空间导出允许你将一个模块的所有导出内容作为一个命名空间对象重新导出。
-- -------------------- ---- ------- -- --------- ------ ----- - - -- ------ ----- - - -- -- ------- ------ - -- -- ---- -------------- -- -- ------ - -- - ---- ------------ ------------------ -- -