飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

JavaScript可选链“?.”

时间:2021-11-25  作者:匿名  

可选链 ?. 是一种访问嵌套对象属性的安全的方式。即使中间的属性不存在,也不会出现错误。

"?."用于解决“不存在的属性”的问题

当一个属性你不确定他在运行的时候是否存在,你却要访问这个属性的时候,如果确实不存在,就会报错,整个程序就会终止运行。这个时候我们就可以使用可选链。

如果可选链 ?. 前面的部分是 undefined 或者 null,它会停止运算并返回该部分。

换句话说,例如 value?.prop:

如果 value 存在,则结果与 value.prop 相同,

否则(当 value 为 undefined/null 时)则返回 undefined。

let user = {}; // user 没有 address 属性
alert( user?.address?.street ); //返回 undefined(不报错)

即使 对象 user 不存在,使用 user?.address 来读取地址也没问题:

let user = null;
alert( user?.address ); // undefined
alert( user?.address.street ); // undefined

例如,在 user?.address.street.name 中,?. 允许 user 为 null/undefined,但仅此而已。更深层次的属性是通过常规方式访问的。如果我们希望它们中的一些也是可选的,那么我们需要使用更多的 ?. 来替换 .。

值得注意的是:

1、不要过度使用可选链

我们应该只将 ?. 使用在一些东西可以不存在的地方。

例如,如果根据我们的代码逻辑,user 对象必须存在,但 address 是可选的,那么我们应该这样写 user.address?.street,而不是这样 user?.address?.street。

所以,如果 user 恰巧因为失误变为 undefined,我们会看到一个编程错误并修复它。否则,代码中的错误在不恰当的地方被消除了,这会导致调试更加困难。

2、?. 前的变量必须已声明

如果未声明变量 user,那么 user?.anything 会触发一个错误:

3、我们可以使用 ?. 来安全地读取或删除,但不能写入

可选链 ?. 不能用在赋值语句的左侧。

例如:

let user = null;
user?.name = "John"; // Error,不起作用
// 因为它在计算的是 undefined = "John"

可选链 ?. 语法有三种形式:

1、obj?.prop —— 如果 obj 存在则返回 obj.prop,否则返回 undefined。

2、obj?.[prop] —— 如果 obj 存在则返回 obj[prop],否则返回 undefined。

3、obj.method?.() —— 如果 obj.method 存在则调用 obj.method(),否则返回 undefined。

正如我们所看到的,这些语法形式用起来都很简单直接。?. 检查左边部分是否为 null/undefined,如果不是则继续运算。

?. 链使我们能够安全地访问嵌套属性。

但是,我们应该谨慎地使用 ?.,仅在当左边部分不存在也没问题的情况下使用为宜。以保证在代码中有编程上的错误出现时,也不会对我们隐藏。

搜你所爱
JavaScript基础教程:目录
湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。