ES11 中可选链操作符的使用场景分析

阅读时长 5 分钟读完

JavaScript 中,访问对象属性时,如果该属性不存在,代码会抛出 TypeError 错误。在复杂的对象结构中访问属性时,需要进行一系列的判断和操作,导致代码的可读性和易用性降低。为了解决这个问题,ES11 引入了可选链操作符,本文将深入解析可选链操作符的使用场景,并探讨如何提升代码的易用性。

可选链操作符

可选链操作符(Optional Chaining Operator)通过明确指出访问的属性是否存在,而不必进行试探操作,来解决访问对象属性时发生 TypeError 错误的问题。可选链操作符的使用方法如下:

其中 ? 表示可选链操作符。

示例

下面举一个使用可选链操作符的示例。假如我们要获取一个用户的详情信息,这里假定返回的数据格式如下:

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

我们想要获取用户的工资,但是有可能返回的数据中没有 job 属性,或者 job 属性中没有 salary 属性。在 ES10 及之前的版本中,我们需要进行如下的判断:

如果 user 或 job 或 salary 中任何一个属性不存在,代码就会抛出异常。使用可选链操作符,我们可以简化代码:

如果 user 或 job 或 salary 中任何一个属性不存在,控制台输出的就是 undefined,避免了异常的抛出。

嵌套对象

可选链操作符可以在嵌套对象中发挥巨大的作用。下面是一个使用嵌套对象的示例:

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

假如我们想要获取用户的直属经理(即 job.manager),而该属性可能不存在,我们需要进行如下的操作:

该操作十分冗长且不易读,使用可选链操作符,我们可以通过以下代码轻松地获取经理的名字:

如果 job 或者 manager 属性不存在,就会输出 undefined

数组

可选链操作符也适用于数组操作。下面是一个使用数组的示例:

假如我们想要获取 Jerry 的工资,我们需要进行如下的操作:

该操作也十分冗长且不易读,使用可选链操作符,我们可以通过以下代码轻松地获取 Jerry 的工资:

如果 job 或者 salary 属性不存在,就会输出 undefined

深度优先遍历

当对象嵌套的深度很大时,可选链操作符能够极大地简化代码。下面是一个使用深度优先遍历的示例:

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

假如我们想要获取 Mark 的名字,我们需要进行如下的操作:

使用可选链操作符,我们可以通过以下代码获取 Mark 的名字:

如果对象属性不存在,就会输出 undefined

总结

可选链操作符是 ES11 中新增的一项语法特性,它通过减少代码的运行时错误,增强了代码的易用性和可读性。在对象结构嵌套复杂的场景下,可选链操作符能够更好地优化代码。但需要注意的是,该特性需要注意兼容性,目前尚未得到所有浏览器的全面支持。

希望本文能够帮助读者了解可选链操作符的使用场景,并且能够合理地运用该技术提升 JavaScript 代码的易用性。

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

纠错
反馈