ECMAScript 2021 中的可选链操作符(Optional chaining operator)

概述

在编写 JavaScript 代码时,我们会经常使用对象及其属性的访问方式。然而,访问对象时可能会遇到一些对象不存在或属性不存在导致的错误,这时候我们需要判断对象和属性是否存在再进行访问操作。而 ECMAScript 2021 给我们带来了一种新的操作符——可选链(Optional chaining operator),可以在不抛出异常的前提下直接访问对象及其属性,这极大地简化了代码的书写。

用法

可选链操作符使用问号( ? )表示,放在需要访问的对象或属性后面,表示该对象或属性可选。语法如下:

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

上述代码中, object 表示对象, property 表示属性名, expression 表示属性名表达式, method 表示方法名。

可选链操作符 ?. 表示如果 object 存在,就会返回 propertyexpression 对应的值;如果 object 不存在,则返回 undefined。如果要调用方法,则依然按照常规方式使用 ()

示例

我们通过一个示例来展示可选链如何使用。

假设我们有一个对象 person ,它的属性 address 包含一个 city 属性,如下所示:

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

我们希望获取 person 对象的 address 属性的值,但是有时候 person 不存在或 address 属性不存在。使用可选链操作符,我们可以这样实现获取:

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

上述代码中, person 对象存在且 address 属性存在,所以返回 Shanghai;如果 person 对象不存在或 address 属性不存在,就会返回 undefined

深入理解

在实际开发中,我们可能会遇到链式访问多个属性或方法的情况。例如,下面的代码需要从 person 对象中访问属性 address ,然后从 address 对象中访问属性 city ,最后调用 toUpperCase 方法将 city 值转换为大写形式:

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

但是,如果 person 对象不存在或 address 属性不存在,这段代码会抛出错误。使用可选链操作符,我们可以这样实现访问:

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

这样,如果 person 对象不存在或 address 属性不存在,就会返回 undefined,不会抛出错误。

注意事项

  1. 可选链操作符 ?. 只能用在成员访问操作符 . 或方括号访问操作符 [] 后面。

  2. 可选链操作符 ?. 可以与其他操作符一起使用,但需要注意优先级。

  3. 可选链操作符 ?. 不能用于函数调用的参数列表中。

总结

可选链操作符是 ECMAScript 2021 的一项新功能,能够优化代码的书写,减少代码错因为对象或属性不存在而导致的异常。在开发时,我们应该灵活使用可选链操作符,避免因为对象或属性不存在而导致代码失败的情况。

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