ES11 新特性:如何使用 Optional Chaining 摆脱繁琐的判空操作

阅读时长 5 分钟读完

在日常开发中,我们经常会遇到需要判断某个对象或属性是否存在的场景。针对这种情况,JavaScript 中提供了多种处理方式,比如短路运算符(&&)、三元运算符、if-else 等等,然而这些处理方式都存在一些弊端,比如代码不够简洁、易读性差等等。ES11 新增了 Optional Chaining 特性,可以让我们更优雅地处理这类判空操作。

Optional Chaining 是什么?

Optional Chaining 翻译过来即“可选链”,它是一项新增的特性,通过 ?. 这个语法糖来实现,让我们在访问对象属性时,能够优雅地避免非空判断,其基本语法形式如下:

这里的 ?. 就相当于传统判断中的 ?,只不过 ?. 不仅可以判断对象是否存在,还能判断对象属性是否存在。Optional Chaining 的存在,可以让我们更加优雅地处理一些繁琐的非空判断,提高代码的可读性。

Optional Chaining 实际应用场景

Optional Chaining 可以在很多场景下使用,下面举几个例子:

1. 保证属性值正确返回

在这个例子中,我们使用 Optional Chaining 确保了 obj 对象是否存在。当 obj 存在时,我们通过 obj?.name 的形式来获取 name 属性值,如果 name 属性不存在,则返回 undefined

2. 保证方法存在时才调用

在这个例子中,我们使用 Optional Chaining 保证了 person.sayHi 是否存在。当 person.sayHi 存在时,我们才会执行 sayHi 方法。

3. 多层级对象属性访问

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

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

在这个例子中,我们使用 Optional Chaining 保证了多层级对象属性是否存在。当 obj.address.city 存在时,我们才会获取 city 属性值,否则返回 undefined

Optional Chaining 注意事项

  1. Optional Chaining 只能在 ES11 或更高版本中使用,如果需要使用,请保证项目环境支持 ES11 或更高版本。
  2. .catch() 中使用 Optional Chaining 时,可以抛出错误,但这只会是语法错误。
  3. 尽量不要在赋值、函数定义等操作中使用 Optional Chaining,这样会使代码更加难以理解。
  4. 在 NPM 中,不应该在 package.json 中使用 Optional Chaining 语法。
  5. 如果 Optional Chaining 运算符定义了 getter 方法,会返回该方法的值,而不是 undefined。

Optional Chaining 实战示例

下面,让我们通过一个实战示例,来演示如何使用 Optional Chaining 处理判空操作。

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

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

在上述示例中,使用 Optional Chaining 处理了 datauserInfonameage 属性是否存在的情况。当所有属性都存在时,我们才会输出 姓名:**,年龄:**

总结

在开发中,针对对象或属性是否存在的判断这一块会涉及到大量冗余的代码,此时使用 Optional Chaining 就能实现简洁优雅的代码处理,同时有效避免判断代码的冗余。如果你还没有使用 Optional Chaining 这一新特性,那么不妨尝试一下吧。

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

纠错
反馈