ECMAScript 2020 是 JavaScript 语言的最新版本,于 2020 年 6 月发布。本文将介绍 ECMAScript 2020 中的新特性,包括可选链操作符、空值合并运算符、BigInt 类型、Promise.allSettled() 方法、String.prototype.matchAll() 方法和 import() 函数。
可选链操作符
可选链操作符(Optional Chaining Operator)是 ECMAScript 2020 中引入的一个新特性,用于简化代码中的空值检查操作。在旧版 JavaScript 中,我们需要通过多个 if 语句来判断对象的属性是否存在,才能安全地访问属性值。而使用可选链操作符,我们可以在访问属性时添加问号(?)来避免出现未定义的错误。
示例代码:
-- -------------------- ---- ------- ----- ---- - - ----- -------- -------- - ------- ---- ---- ----- ----- ---------- ------ ----- -- -- ----------------------------------- -- ---------
在上面的代码中,我们使用了可选链操作符来访问 user 对象的 address 属性中的 zipCode 属性。如果 address 属性不存在,则该表达式会返回 undefined。
空值合并运算符
空值合并运算符(Nullish Coalescing Operator)也是 ECMAScript 2020 中引入的一个新特性,用于简化代码中的空值检查操作。与可选链操作符不同的是,空值合并运算符只在变量值为 null 或 undefined 时才会生效。
示例代码:
-- -------------------- ---- ------- ----- ---- - - ----- -------- -------- - ------- ---- ---- ----- ----- ---------- ------ ----- -- -------- ----- -- ------------------------ -- ----------- -- ---- ---------------------------- -- ----------- -- -------
在上面的代码中,我们使用了空值合并运算符来检查 user 对象的 zipCode 和 phoneNumber 属性是否为 null 或 undefined。如果属性值为 null 或 undefined,则该表达式会返回默认值('unknown')。
BigInt 类型
BigInt 类型是 ECMAScript 2020 中引入的一个新类型,用于表示任意精度的整数。在旧版 JavaScript 中,整数的最大值为 2^53 - 1,而超出该范围的整数会被自动转换为浮点数。而使用 BigInt 类型,我们可以安全地表示任意精度的整数。
示例代码:
const a = 9007199254740991n; const b = 1n; console.log(a + b); // 9007199254740992n
在上面的代码中,我们使用了 BigInt 类型来表示超出整数范围的整数,并对其进行加法运算。注意,在 BigInt 类型的整数后面必须添加后缀 n,否则会被解释为普通的整数。
Promise.allSettled() 方法
Promise.allSettled() 方法是 ECMAScript 2020 中引入的一个新方法,用于并行处理多个 Promise 对象,并返回每个 Promise 对象的状态和结果。与 Promise.all() 方法不同的是,Promise.allSettled() 方法会等待所有 Promise 对象都 settled(即 fulfilled 或 rejected)后再返回结果。
示例代码:
-- -------------------- ---- ------- ----- -------- - - ------------------- ------------------ --------------- ------------------- -- ----------------------------------------- -- - --------------------- ---
在上面的代码中,我们使用 Promise.allSettled() 方法并行处理三个 Promise 对象,并在所有 Promise 对象 settled 后输出结果。结果数组中包含每个 Promise 对象的状态和结果,无论是 fulfilled 还是 rejected。
String.prototype.matchAll() 方法
String.prototype.matchAll() 方法是 ECMAScript 2020 中引入的一个新方法,用于在字符串中查找所有匹配正则表达式的子串,并返回一个迭代器对象。与 String.prototype.match() 方法不同的是,String.prototype.matchAll() 方法可以查找所有匹配的子串,而不只是第一个匹配的子串。
示例代码:
const str = 'hello world'; const regex = /\w+/g; const matches = str.matchAll(regex); for (const match of matches) { console.log(match[0]); }
在上面的代码中,我们使用 String.prototype.matchAll() 方法查找字符串中所有匹配正则表达式 /\w+/g 的子串,并使用 for...of 循环输出每个匹配的子串。
import() 函数
import() 函数是 ECMAScript 2020 中引入的一个新方法,用于动态地加载模块。与静态 import 语句不同的是,import() 函数可以在代码运行时动态地加载模块,从而实现按需加载和代码分割等功能。
示例代码:
async function loadModule() { const module = await import('path/to/module.js'); module.doSomething(); } loadModule();
在上面的代码中,我们使用 import() 函数动态地加载模块,并在加载完成后调用模块的 doSomething() 方法。注意,import() 函数返回一个 Promise 对象,必须使用 await 或 then() 方法来获取模块对象。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67da56afa941bf713424634f