ECMAScript 2020(也称为ES11)是 JavaScript 的最新版本,包含了一些新的语言特性和改进。本文将概述这些新特性并提供一些示例代码。这些特性将有助于开发者在编写更加简洁、高效的 JavaScript 代码方面更具灵活性。
1. BigInt
BigInt 是一种新的数字类型,它可以处理比JavaScript Number类型所允许的更大的数字值。 在 JavaScript 中,Number类型的最大值为 2^53 - 1,而 BigInt 可以支持比这个更大的数字值。
使用 BigInt,可以通过在数字后面加上 n 或者使用 BigInt() 函数来创建 BigInt 类型的值。
const bigNumber = 9007199254740991n; const reallyBigNumber = BigInt("9007199254740991000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000");
2. Promise.allSettled()
Promise.allSettled() 方法可以接收一个 Promise 数组,并返回一个新的 Promise,该 Promise 在所有 Promise 都已解决或被拒绝时解决。
-- -------------------- ---- ------- ----- -------- - - ------------------------- ---------- ------------------------ ---------- ------------------------ -------- --------- -- ---------------------------- --------------- -- --------------------- -------------- -- --------------------
输出结果:
[ { status: 'fulfilled', value: 'Resolved promise' }, { status: 'rejected', reason: 'Rejected promise' }, { status: 'fulfilled', value: 'Another resolved promise' } ]
3. Optional Chaining
Optional Chaining 可以让我们更加方便地访问嵌套对象的属性。如果属性不存在,它会返回 undefined 而不会抛出错误。
-- -------------------- ---- ------- ----- ------ - - ----- ------- -------- - ----- ---- ------ ------- - ----- ---------- - - -- ------------------------------------------- -- ---------- -------------------------------------------- -- ---------
4. Nullish Coalescing
Nullish Coalescing 可以帮助我们更加方便地处理变量为 null 或者 undefined 的情况。它会返回第一个定义的值。
const name = null ?? "default name"; console.log(name); // "default name" const age = 0 ?? 18; console.log(age); // 0 const address = undefined ?? "default address"; console.log(address); // "default address"
5. String.prototype.matchAll()
String.prototype.matchAll() 方法可以接收一个正则表达式,并返回一个迭代器,该迭代器包含所有匹配的结果。
const str = "Hello, world!"; const regexp = /[a-z]/g; const matches = str.matchAll(regexp); for (const match of matches) { console.log(match); }
输出结果:
["e", index: 1, input: "Hello, world!", groups: undefined] ["l", index: 2, input: "Hello, world!", groups: undefined] ["l", index: 3, input: "Hello, world!", groups: undefined] ["o", index: 4, input: "Hello, world!", groups: undefined] ["o", index: 7, input: "Hello, world!", groups: undefined] ["r", index: 8, input: "Hello, world!", groups: undefined] ["l", index: 10, input: "Hello, world!", groups: undefined] ["d", index: 11, input: "Hello, world!", groups: undefined]
6. 其他特性
除了上述特性外,ES11 还添加了其他一些新特性,例如:
- globalThis:可以访问全局对象,不管是在浏览器还是在 Node.js 环境下。
- import():可以动态导入模块,而不是在编译时就确定模块的依赖关系。
- for-in 循环和 Object.keys() 方法现在会遵循属性的插入顺序。
- 可选的 catch 绑定:可以在 catch 块中省略参数,而不会抛出错误。
结论
ES11 带来了许多新特性,使得 JavaScript 变得更加灵活和强大。开发者可以通过这些新特性编写更加简洁、高效的代码。在使用这些新特性时,应该注意它们是否被当前的浏览器或运行环境所支持。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6758e17e8210828e23357746