如何在 ES10 中使用可选链操作符来简化 if...else 语句

阅读时长 4 分钟读完

在开发前端应用时,我们经常需要访问嵌套对象或者数组中的属性或者元素,但是这种情况下有时候属性或者元素可能会不存在,这就会导致程序抛出异常。通常解决这种问题的方式是使用 if...else 语句来检测属性或者元素是否存在,但是这样的代码往往比较冗长,不太优雅。ES10 的可选链操作符(Optional chaining operator)将会为我们解决这个问题,让代码更加简洁。

可选链操作符的基本用法

可选链操作符(?.)是一个新的操作符,表示如果左边的操作符不是null或undefined,则访问右边的属性或者方法;否则返回undefined。具体来说,如果一个对象有一个可能为null或undefined的属性,可以使用可选链操作符来访问。例如:

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

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

上述代码中,我们使用了可选链操作符来访问user对象的contacts、address和city属性,这三个属性都可能不存在。如果这些属性存在,则返回属性值,否则返回undefined。

可选链操作符的高级用法

可选链操作符不仅可以用于访问属性或者方法,还可以用于调用函数或者构造函数。当我们调用一个可能不存在的函数或者构造函数时,如果不使用可选链操作符,那么会抛出异常。但是使用可选链操作符,如果函数或者构造函数不存在,则返回undefined。例如:

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

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

上述代码中,我们使用了可选链操作符来调用user对象中的getContacts函数。如果getContacts函数不存在,则返回undefined。另外,我们还可以使用可选链操作符来调用构造函数,例如:

上述代码中,我们使用了可选链操作符来调用JSON.parse函数和字符串的replace函数。在使用字符串的replace函数时,可能会引发异常,因为replace函数会返回一个新字符串,如果返回的新字符串上没有replace函数,则会出现异常,但是使用可选链操作符时,如果新字符串为null或undefined,则返回undefined,不会抛出异常。

使用可选链操作符简化 if...else 语句

在ES10以及之前的JavaScript标准中,我们通常使用if...else 语句来判断某个属性或者元素是否存在,如果存在则执行某些操作,否则执行其他操作。例如:

上述代码中,我们使用了if...else语句来检测user对象的contacts、address和city属性是否存在,如果存在则打印城市名称,否则打印错误信息。但是这样的代码比较冗长,不太优雅。使用可选链操作符可以让代码更加简洁,例如:

上述代码中,我们使用了可选链操作符和nullish coalescing操作符(??),如果city存在则打印城市名称,否则打印错误信息。这样的代码更加清晰简洁。

总结

可选链操作符是一个很好的语言特性,可以让我们避免繁琐的if...else语句,让代码更加简洁。在日常开发中,我们可以通过可选链操作符来访问对象的属性或者元素,调用对象的方法或者函数,并简化if...else语句。但是需要注意的是,可选链操作符目前只在最新版本的浏览器以及Node.js中支持,并且还不是所有的浏览器都支持。因此,在实际项目开发中需要注意浏览器的兼容性问题。

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

纠错
反馈