ES11,也被称作 ES2020,是 ECMAScript 最新的版本。在这个版本中,我们又迎来了一些新的特性。这些新特性不仅可以让我们的开发更加便捷,还能提高代码的可读性和可维护性。本文将介绍 ES11 中的 7 个新特性,并附上示例代码,希望能够帮助大家更好地理解这些新特性。
1. Promise.allSettled()
在 ES11 中,Promise 对象新增了一个 allSettled() 方法,它与 Promise.all() 方法类似,但 allSettled() 不会在任何 Promise 被拒绝时中断执行。而是会等待所有 Promise 对象都变为 settled 状态(已完成或已拒绝),然后返回一个 Promise 对象,该 Promise 对象将包含一个数组,数组中的每个元素都是一个对象,表示对应的 Promise 对象的状态和结果。
示例代码:
-- -------------------- ---- ------- ----- -------- - - ------------------- ------------------------ ------------------ -- ----------------------------------------- -- - --------------------- ---展开代码
输出结果:
[ { status: 'fulfilled', value: 1 }, { status: 'rejected', reason: 'error' }, { status: 'fulfilled', value: 3 } ]
2. Optional Chaining
Optional Chaining 是一种新的语法,可以简化访问嵌套对象的代码。在访问一个嵌套对象的属性时,我们通常需要使用多个点号,如 obj.a.b.c。但如果 obj.a 不存在,那么 obj.a.b.c 会报错。使用 Optional Chaining,我们可以使用问号(?)来代替点号,如 obj?.a?.b?.c。如果 obj.a 不存在,那么表达式的值将是 undefined,而不会报错。
示例代码:
-- -------------------- ---- ------- ----- ---- - - ----- -------- -------- - ----- ----------- ------- -------- ----- - -- -------------------------------- -- ---------- ----------------------------------- -- --------- ----------------------------------------------- -- ---------展开代码
3. Nullish Coalescing
Nullish Coalescing 是另一种简化代码的语法。它可以用来判断一个变量是否为 null 或 undefined,如果是,则返回默认值。在以前,我们通常使用逻辑或(||)运算符来实现这个功能,如 a || b。但逻辑或运算符在 a 的值为 false、0、'' 或 NaN 时,都会返回 b。这可能会导致一些意外的结果。Nullish Coalescing 使用两个问号(??)来代替逻辑或运算符,它只会在 a 的值为 null 或 undefined 时返回 b。
示例代码:
const a = null; const b = 1; console.log(a ?? 2); // 2 console.log(b ?? 2); // 1
4. String.prototype.matchAll()
在 ES11 中,String 对象新增了一个 matchAll() 方法,它可以用于在字符串中匹配所有符合某个正则表达式的子串,并返回一个迭代器对象。迭代器对象中的每个元素都是一个数组,包含匹配的子串和各个捕获组的匹配结果。
示例代码:
const str = 'hello world'; const regex = /l/g; for (const match of str.matchAll(regex)) { console.log(match); }
输出结果:
[ 'l', index: 2, input: 'hello world', groups: undefined ] [ 'l', index: 3, input: 'hello world', groups: undefined ]
5. BigInt
BigInt 是一种新的数据类型,用来表示任意精度的整数。它可以表示比 Number 类型更大的整数,而且不会出现精度丢失的问题。在 BigInt 类型的整数后面需要加上 n,以区分它们和普通的 Number 类型的整数。
示例代码:
const a = 9007199254740991n; const b = BigInt(Number.MAX_SAFE_INTEGER); console.log(a + b); // 18014398509481982n
6. globalThis
globalThis 是一个新的全局对象,在浏览器和 Node.js 中都可以使用。它可以用来获取全局作用域下的 this 对象。在浏览器中,globalThis 等同于 window 对象;在 Node.js 中,globalThis 等同于 global 对象。
示例代码:
console.log(globalThis === window); // true console.log(globalThis === global); // true
7. import()
import() 是一个动态导入模块的方法,它可以在运行时根据需要加载一个模块。在以前,我们只能使用 import 语句来导入一个模块,但这种方式必须在代码的头部使用,并且不能根据条件来导入不同的模块。使用 import() 方法,我们可以在代码的任何位置动态导入一个模块。
示例代码:
-- -------------------- ---- ------- ----- ---------- - -------------- ------------------ ------------ -- - -------------------------- -- ---------- -- - ------------------- ---展开代码
以上就是 ES11 中的 7 个新特性。它们都是非常实用的特性,可以帮助我们更加便捷地编写代码。希望本文能够对大家有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67889fc409307066474801f1