升级到 ECMAScript 2021 - 链式 Nullish 合并 / 对象赋值问题 / 可选的 chaining

阅读时长 5 分钟读完

ECMAScript 2021(ES12)是 JavaScript 的最新版本,于 2021 年 6 月正式发布。它引入了许多新的语法和特性,这些特性可以帮助开发者更加高效地编写 JavaScript 代码。本文将介绍其中三个特性:链式 Nullish 合并、对象赋值问题和可选的 chaining。

链式 Nullish 合并

链式 Nullish 合并是一种新的运算符,它用于合并两个值,并返回其第一个非空值。它的语法是 a ?? b,其中 ab 是任意表达式。

在 JavaScript 中,常常需要检查一个变量是否为 null 或 undefined。在以前的版本中,我们通常使用 || 运算符来做这件事。例如,如下代码:

这段代码的意思是:如果 foo 是 null 或 undefined,那么 foo 的值为 'default value'。但是,这种写法会存在一些问题,比如当 foo 的值为 ''0 时,也会被认为是 falsy(假值)。

链式 Nullish 合并运算符解决了这个问题。它只对 null 和 undefined 进行操作,不对其他 falsy 值进行操作。例如,如下代码:

可以看到,链式 Nullish 合并只对 null 和 undefined 进行操作,不对其他 falsy 值进行操作。

对象赋值问题

对象赋值问题是指在 JavaScript 中,当我们想要将一个对象的属性赋值到另一个对象上时,往往需要用到 Object.assign() 方法。例如,如下代码:

这段代码的意思是:将 source 中的属性复制到 destination 中,如果 destination 中已经存在同名属性,则覆盖它。

在 ECMAScript 2021 中,我们可以使用更加简单的语法来实现这个功能。例如,如下代码:

这段代码的意思是:先将 destination 中的所有属性复制到 result 中,然后再将 source 中的所有属性复制到 result 中。如果 result 中已经存在同名属性,则自动覆盖它。

可选的 chaining

可选的 chaining 是一种新的语法,它可以帮助我们在访问对象属性和方法时,避免出现 undefined 的错误。它的语法是 ?.,例如:

-- -------------------- ---- -------
----- ------ - -
  ----- -----
  -------- -
    --------- ------
    ----- ------
  --
--

-------------------------- -- -------
--------------------------------------- -- --------
------------------------- -- ------------
------------------------------------- -- ------------

在这段代码中,如果 personperson.address 为 null 或 undefined,那么不会报错,而是直接返回 undefined。这样,我们就可以避免访问 undefined 的情况。

总结

ECMAScript 2021 引入了许多新的语法和特性,本文只介绍了其中三个:链式 Nullish 合并、对象赋值问题和可选的 chaining。这些特性可以帮助开发者更加高效地编写 JavaScript 代码,减少出错的概率。我们可以在实际编码中尝试使用这些特性,提高代码的效率和可读性。

示例代码

以下是一些示例代码,可以帮助读者更好地理解本文介绍的特性。

链式 Nullish 合并

对象赋值问题

可选的 chaining

-- -------------------- ---- -------
----- ------ - -
  ----- -----
  -------- -
    --------- ------
    ----- ------
  --
--

-------------------------- -- -------
--------------------------------------- -- --------
------------------------- -- ------------
------------------------------------- -- ------------

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66515202d3423812e44e732e

纠错
反馈