ECMAScript 2019:如何使用 optional chaining 操作符避免 bug

阅读时长 4 分钟读完

在开发前端应用时,我们常常会遇到一个问题:当我们需要对一个对象的某个属性进行取值时,如果这个对象为空或者该属性不存在,那么程序就会crash。而且在实际开发中,这种情况非常常见,既麻烦又易出错。而 ECMAScript 2019 中的 optional chaining 操作符可以很好地解决这个问题。

optional chaining 它是什么?

ECMAScript 2019 中引入的 optional chaining 操作符(?.)可以简化属性访问的代码,同时也可以有效地防止在代码中出现访问 null,undefined 或者不存在的属性而导致整个应用程序崩溃。

使用 optional chaining 操作符可以在访问对象的属性的时候使代码更加灵活,同时也更加可读。

ECMAScript 2019 中的 optional chaining 操作符只在目标对象不是 undefined 和 null 时执行,否则就会直接返回 undefined。因此,我们可以更自如地访问对象或数组的属性或元素。

如何使用?

使用 optional chaining 操作符非常简单,在访问对象的属性或者数组元素之前加上问号(?)即可,如果该属性或者元素不存在,那么会返回 undefined。

示例如下:

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

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

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

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

在什么情况下会用到 optional chaining 操作符?

实际上,在访问对象的属性时,我们常常不知道该属性是否存在,如果其中一个层级不存在的话,代码就会出错,这是开发者非常不愿意看到的。而 optional chaining 操作符可以避免这种情况的发生。

下面是实际情况中经常会出现的一些代码示例:

  1. 访问嵌套对象的属性
-- -------------------- ---- -------
----- --- - -
  ----- -------
  ----- -
    -------- ----------
    ------ -------
  -
--

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

-- -------- -------- -----
----- ----- - -----------------
  1. 访问数组中的属性
-- -------------------- ---- -------
----- --- - -
  -
    ----- -------
    ---- ---
    ------- ----
  --
  -
    ----- ------
    ---- ---
    ------- ----
  -
--

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

-- -------- -------- -----
----- ------ - ---------------
  1. 访问多层级的属性
-- -------------------- ---- -------
----- --- - -
  ----- -------
  ----- -
    --------- -
      ----- ---------
    -
  -
--

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

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

总结

在开发中,为了尽可能减少代码 bug 的出现,我们需要写出更加健壮和可靠的代码。而 optional chaining 操作符可以很好地帮助我们避免许多不必要的错误。在实际开发中,我们应该尽可能地使用它,以此来使我们的代码可读性更高,可维护性更强。

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

纠错
反馈