ES11(ECMAScript2020)的新特性:空值合并和可选链式调用操作符

随着前端开发的不断发展,JavaScript 也在不断更新演变,ECMAScript(简称 ES)也在不断更新。现在,最新的 ES11(ECMAScript2020)已经来了,其中包含了许多新功能和语法,本文主要介绍其中两个新特性:空值合并和可选链式调用操作符。

空值合并(Nullish Coalescing)

在 JavaScript 中,常常使用 || 运算符来进行默认值设置。例如:

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

这个语句的意思是,如果 providedOption 为真值(truthy),则使用 providedOption,否则使用 defaultOption。然而,这种语法有一个问题,就是对于 falsy 值(也就是值为 false、0、''、null、undefined、NaN 等),会被认为是未提供该选项而使用默认值。这样,如果我们想要给 providedOption 设置值为 0 或空字符串时,就会出现问题。此时,我们就可以使用空值合并操作符(??)来解决这个问题。

具体来说,空值合并操作符的行为是,只有在左侧为 null 或 undefined 时,才会使用右侧的默认值。例如:

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

这个语句的意思是,如果 providedResult 为 null 或 undefined,则使用 defaultResult,否则使用 providedResult。这样,就可以避免使用 falsy 值时出现问题。下面是一个示例:

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

上面的代码中,result1、result2 和 result3 都是 'default',这是因为 a、b 和 c 都是 falsy 值,所以使用了默认值。而 result4、result5 和 result6 的结果分别为 'default'、'' 和 0,这是因为使用了空值合并操作符,从而避免了使用 falsy 值时出现的问题。

可选链式调用(Optional Chaining)

在 JavaScript 开发中,经常需要访问对象的属性和方法,而有时候这些属性和方法可能不存在。此时,如果直接访问,就会出现 undefined 错误,需要进行繁琐的判断。ES11 中新增了可选链式调用操作符(?.),可以方便地进行链式访问,并在遇到 undefined 时自动停止访问。

具体来说,可选链式调用操作符的行为是,当左侧表达式结果为 null 或 undefined 时,整个表达式直接返回 undefined,不会继续执行右侧的访问操作。例如:

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

这个语句的意思是,如果 user 存在并且有 name 属性,则返回 user.name,否则返回 undefined。

另外,可选链式调用操作符还可以进行函数调用,例如:

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

这个语句的意思是,如果 obj 和 obj.foo 都存在,则调用 obj.foo,并返回其结果,否则返回 undefined。

下面是一个示例代码:

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

上面的代码中,city 的值为 'Shanghai',因为 user.address.city 存在。country 的值为 undefined,因为 user.address.country 不存在。getName 的值也为 undefined,因为 user.getName 不存在。

结论

空值合并和可选链式调用操作符是 ES11 中新增的两个重要特性,它们可以提高代码的可读性和可维护性,避免出现因为 null 或 undefined 而导致的错误。在编写前端代码时,可以适当运用这两个特性,提高代码的健壮性。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6722f1992e7021665e0d8ca4