ES11 (2020) 是 ECMAScript 的最新版本,它带来了许多新的特性和改进,这些特性可以提高开发人员的生产力和代码的可读性。在这篇文章中,我们将详细介绍 ES11 的新特性并提供示例代码。
1. String.prototype.matchAll
ES11 引入了 String.prototype.matchAll
方法,它可以返回一个迭代器,用于迭代字符串中所有匹配正则表达式的子串。在以前的版本中,我们必须使用 RegExp.prototype.exec
方法来实现这个功能。
const str = "Hello, world!"; const regex = /[a-z]/g; const matches = str.matchAll(regex); 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: 9, input: "Hello, world!", groups: undefined] ["d", index: 10, input: "Hello, world!", groups: undefined]
2. Promise.allSettled
Promise.allSettled
方法返回一个 Promise,该 Promise 在所有 Promise 都被解决或拒绝后解决,而不是在第一个 Promise 被拒绝时立即拒绝。该方法返回一个数组,该数组包含每个 Promise 的结果或原因。
// javascriptcn.com code example const promises = [ Promise.resolve("Success!"), Promise.reject("Error!"), Promise.resolve("Another success!"), ]; Promise.allSettled(promises) .then((results) => { console.log(results); }) .catch((error) => { console.error(error); });
输出:
[ { status: "fulfilled", value: "Success!" }, { status: "rejected", reason: "Error!" }, { status: "fulfilled", value: "Another success!" } ]
3. Nullish Coalescing Operator
Nullish Coalescing 运算符 (??
) 可以用于检查一个变量是否为 null
或 undefined
,如果是,则返回默认值。在以前的版本中,我们必须使用条件运算符 (?:
) 或逻辑或运算符 (||
) 来实现这个功能。
const foo = null ?? "default"; console.log(foo); // "default" const bar = 0 ?? "default"; console.log(bar); // 0
4. Optional Chaining Operator
可选链运算符 (?.
) 可以在访问对象的属性或方法时避免出现 TypeError
错误。如果对象的属性或方法不存在,则返回 undefined
。
// javascriptcn.com code example const person = { name: "Alice", address: { city: "New York", state: "NY", }, }; console.log(person?.address?.city); // "New York" console.log(person?.address?.zipCode); // undefined
5. BigInt
ES11 引入了 BigInt
类型,它可以表示任意精度的整数。这个类型的值必须以 n
结尾,以区分普通数字和 BigInt 数字。
const a = 123456789012345678901234567890n; const b = BigInt("123456789012345678901234567890"); console.log(a === b); // true
结论
ES11 引入了许多新的特性和改进,这些特性可以提高开发人员的生产力和代码的可读性。在实际开发中,我们应该尽可能地使用这些新特性来提高代码的质量和效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67332fd90bc820c58240fe74