ES2020:新特性 Optional Chaining(可选链操作符)

在前端开发中,我们经常需要从对象或数组中获取特定的值或方法。但是如果这些对象或数组中存在 null 或 undefined 的值,那么在获取这些值时就容易出现错误,导致代码无法正常执行。ES2020 中引入了新的特性,即可选链操作符(Optional Chaining),可以方便地解决这个问题。

可选链操作符的作用

可选链操作符(?.)是一个新的操作符,用于安全地访问深度嵌套的对象属性或数组元素,可以避免出现 TypeError 错误。如果对象或数组中存在 null 或 undefined 的值,可选链操作符会直接返回 undefined。

举个例子,假设我们有一个对象 person,里面存储了人的基本信息,其中可能有些属性不存在:

我们需要获取 person 对象中的 email 属性:

如果 contact 属性不存在,上面的代码会报错。为了避免这种错误,我们可以使用可选链操作符:

这样,如果 contact 属性不存在,email 变量会得到 undefined 值,而不是报错。

可选链操作符的语法

可选链操作符可以用于对象的属性访问和数组的元素访问,语法如下:

  • 对象属性访问:obj?.propobj?.[expr]
    • obj:必需,要访问的对象,可以是表达式。
    • propexpr:可选,要访问的属性名或表达式,可以是字符串或其他表达式。
  • 数组元素访问:arr?.[index]
    • arr:必需,要访问的数组,可以是表达式。
    • index:必需,要访问的元素下标,可以是表达式。

可选链操作符的使用

对象属性访问

假设我们有一个对象 book,里面存储了书籍的基本信息,但是并不是所有书籍都有作者信息,有些书籍没有作者属性。我们需要获取 book 对象中的作者名字:

如果 author 属性不存在,上面的代码就会报错。为了避免这种错误,我们可以使用可选链操作符:

这样,如果 author 属性不存在,authorName 变量会得到 undefined 值,而不是报错。

可选链操作符也可以用于多级属性的访问:

这样,如果 author 属性不存在,authorEmail 变量会得到 undefined 值;如果 contact 属性不存在,authorEmail 变量也会得到 undefined 值。

可选链操作符可以和其他语法一起使用,比如模板字符串:

数组元素访问

假设我们有一个数组 numbers,其中存储了一些数字。我们需要获取数组中第二个元素的值:

如果 numbers 数组长度小于 2,上面的代码就会报错。为了避免这种错误,我们可以使用可选链操作符:

这样,如果 numbers 数组长度小于 2,secondNumber 变量会得到 undefined 值,而不是报错。

可选链操作符也可以用于多级数组的访问:

这样,如果 data 数组不存在或长度小于 x,或第 x 个元素不存在或不是数组,或第 y 个元素不存在或不是数组,或第 z 个元素不存在,value 变量会得到 undefined 值。

总结

可选链操作符是 ES2020 中的一个新特性,可以安全地访问深度嵌套的对象属性或数组元素,避免出现 TypeError 错误。可选链操作符可以用于对象的属性访问和数组的元素访问,语法简单,易于使用,可以提高代码健壮性和可读性。

希望这篇文章对你理解可选链操作符有所帮助,可以更好的应用到实际项目中,提升代码的可维护性和可读性。

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


纠错
反馈