拥抱 ES11 (optional chaining) 从此告别 TypeError:"Cannot read property '***' of null”

阅读时长 4 分钟读完

拥抱 ES11 (optional chaining) 从此告别 TypeError:"Cannot read property '***' of null"

在前端开发中,我们经常会遇到 TypeError:"Cannot read property '***' of null" 这样的错误。这种错误通常是因为我们在使用对象属性时没有进行空值判断所导致的。在 ES11 中,新增了 optional chaining 这个语法糖,可以很好地解决这个问题。

optional chaining 是一种简化代码的语法糖。它的作用是在调用对象属性或方法时,如果对象不存在该属性或方法,就不会报错,而是返回 undefined。这样我们就不需要手动判断对象是否存在该属性或方法,从而避免了因为空值而导致的 TypeError 错误。

下面是 optional chaining 的语法:

其中,object 表示对象,property 表示对象的属性,method() 表示对象的方法。

接下来,我们通过一个实例来看看 optional chaining 的具体用法。

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

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

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

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

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

在上面的代码中,我们定义了一个 person 对象,包含了 nameaddresshobbies 这些属性。首先,我们使用传统的写法获取 person 对象中的 address 属性的 city 值,需要手动判断 person.address 是否存在,如果不存在则返回 undefined。然后,我们使用 optional chaining 的方式获取 city 值,如果 address 属性不存在,则返回 undefined

除了获取对象属性的值,optional chaining 还可以调用对象的方法。下面是一个示例:

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

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

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

在上面的代码中,我们定义了一个 person 对象,并定义了一个 sayHello 方法。使用传统的写法调用 sayHello 方法需要手动判断 person 对象是否存在以及是否有 sayHello 方法。使用 optional chaining 的方式则可以直接调用 person?.sayHello() 方法。

总结:

optional chaining 是一种非常实用的语法糖,可以很好地避免因为空值而导致的 TypeError 错误。在实际开发中,我们应该尽量使用 optional chaining 来简化代码,提高开发效率。

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

纠错
反馈