简述ECMASript 11 新特性 ?
ECMAScript 2020(也称为ECMAScript 11)引入了多项新特性和改进,进一步增强了JavaScript的功能,提高了开发效率,并改善了语言的表达力。以下是ECMAScript 2020的一些主要新特性:
1. String.prototype.matchAll()
- 描述: 提供了一种新的方法来匹配一个字符串针对一个正则表达式的所有匹配项,返回一个迭代器,该迭代器返回所有匹配的结果。
-
示例:
const string = 'test1test2'; const regex = /t(e)(st(\d?))/g; for (const match of string.matchAll(regex)) { console.log(match); }
2. BigInt
- 描述: 为JavaScript引入了一种新的数值类型
BigInt
,允许安全地存储和操作大整数,甚至超过了JavaScript中的Number
类型能够安全表示的范围。 -
示例:
const aBigNumber = 9007199254740991n; const anotherBigNumber = BigInt(9007199254740991); console.log(aBigNumber + anotherBigNumber); // 18014398509481982n
3. 动态导入(Dynamic Import)
- 描述: 使用
import()
语法允许你异步地导入模块,是实现代码分割和按需加载的关键特性。 -
示例:
(async () => { const module = await import('./module.js'); module.doSomething(); })();
4. Promise.allSettled()
- 描述: 返回一个
Promise
,该Promise
在所有给定的Promise
已经兑现(fulfilled)或拒绝(rejected)后兑现,带有每个Promise
的结果。 -
示例:
const promises = [ Promise.resolve(33), new Promise(resolve => setTimeout(() => resolve(66), 0)), Promise.reject(new Error('an error')) ]; Promise.allSettled(promises) .then(results => console.log(results));
5. null
合并运算符(Nullish Coalescing Operator)
- 描述: 通过
??
运算符允许在左侧操作数为null
或undefined
时,返回右侧操作数的值。 -
示例:
const foo = null ?? 'default string'; console.log(foo); // 输出: "default string"
6. 可选链(Optional Chaining)
- 描述: 通过
?.
运算符允许开发者安全地访问深层嵌套的对象属性,即使其中某个属性不存在也不会引起错误。 -
示例:
const user = { profile: { name: 'John' } }; console.log(user.profile?.name); // 输出: "John" console.log(user.profile?.age?.value); // 输出: undefined
7. globalThis
- 描述: 提供了一个标准的方式来获取不同环境下全局对象的引用,比如在浏览器环境中是
window
,在Node.js中是global
。 -
示例:
console.log(globalThis);
ECMAScript 2020的这些新特性进一步丰富了JavaScript的语言特性,使其更加强大和灵活,尤其是在处理大数据、异步编程和深层嵌套对象时。