随着 ECMAScript 标准的更新,JavaScript 开发者也需要时刻保持关注,了解最新的特性和语法。本文将详细介绍 ECMAScript 2020 中引入的几个新特性,并提供实际的示例代码。
1. Nullish 合并运算符
在 JavaScript 中,当一个变量的值为 falsy 值(比如 0、''、false、null、undefined)时,常常会使用 || 运算符为其赋一个默认值。例如:
let myVar = myVar || 'default';
然而,当 myVar 的值为 0 或 '' 时,上述代码会将 'default' 赋给 myVar。这种情况下,我们希望的实际上是不赋任何值,而不是将默认值赋给它。因此,ES2020 引入了 Nullish 合并运算符 ??,它只在变量的值为 null 或 undefined 时才会赋默认值。例如:
let myVar = myVar ?? 'default';
如果 myVar 的值为 null 或 undefined,上述代码会将 'default' 赋给 myVar。如果 myVar 的值为 0 或 '',则不会发生任何改变。
2. 可选链运算符
某些属性或方法可能只在对象存在时才能使用,否则会产生错误。在过去,为了避免这种错误,我们通常会写出冗长的代码:
if (obj && obj.prop && obj.prop.method) { obj.prop.method(); }
ES2020 引入了可选链运算符 ?.,可以更简洁地处理这种情况:
obj?.prop?.method?.();
如果 obj、obj.prop 或 obj.prop.method 中任意一个不存在,这行代码都不会产生错误,并直接返回 undefined。
3. Promise.allSettled
在过去,Promise.all 可以用来处理多个 Promise 实例,等待它们全部执行完毕。当其中任何一个 Promise 失败时,Promise.all 就会立即返回,并带有失败的原因。然而,在实际应用中,我们有时需要在所有 Promise 执行完毕后,无论成功还是失败,都需要做一些操作。ES2020 引入了 Promise.allSettled,可以返回所有 Promise 的执行信息,包括成功和失败:
-- -------------------- ---- ------- ----- -------- - - -------------------- -------------------- ------------------- -- ---------------------------- ------------- -- - -- -- ------- ------------------ --- ------ ------ -- -------- - -- -------------- --- ------------ - ---------------------------------- - ---- - ----------------------------------- - - ---
4. String.prototype.matchAll
在过去,我们通常使用正则表达式的 g 标志,以匹配字符串中的所有内容。然而,正则表达式的 g 标志无法捕获每种匹配。ES2020 引入了 String.prototype.matchAll 方法,可以匹配一个字符串中的所有内容,同时提供了具体的信息:
const regex = /t(e)(st(\d?))/g; const str = 'test1test2test3'; for (const match of str.matchAll(regex)) { console.log(match); }
这行代码将输出三个匹配项的信息,包括每个匹配的位置、值、捕获的分组等:
-- -------------------- ---- ------- - -------- ---- ------ ---- ------ -- ------ ------------------ ------- --------- - - -------- ---- ------ ---- ------ -- ------ ------------------ ------- --------- - - -------- ---- ------ ---- ------ --- ------ ------------------ ------- --------- -
结论
本文介绍了 ECMAScript 2020 的四个新特性:Nullish 合并运算符、可选链运算符、Promise.allSettled 和 String.prototype.matchAll。这些特性可以帮助 JavaScript 开发者简化代码、避免错误,并提供更精细的信息,希望对大家有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f62925c5c563ced58028e9