可选链运算符
当尝试访问对象属性时,如果对象的值为undefined或null,那么属性访问将产生错误。为了提高程序的健壮性,在访问对象属性时通常需要检查对象是否已经初始化,只有当对象不为undefined和null时才去访问对象的属性。可选链运算符旨在帮助开发者省去冗长的undefined值和null值检查代码,增强了代码的表达能力。
兼容性
基础语法
可选链运算符由一个问号和一个点号组成,即“?.”。可选链运算符有以下三种语法形式: ▪可选的静态属性访问。 ▪可选的计算属性访问。 ▪可选的函数调用或方法调用。
可选的静态属性访问
可选的静态属性访问语法如下所示: obj?.prop 在该语法中,如果obj的值为undefined或null,那么表达式的求值结果为undefined;否则,表达式的求值结果为obj.prop。
const a = {};
// 如果访问 a 属性 c , 如果是
console.log(a?.c); // 结果 就是 undefined
可选的计算属性访问
可选的计算属性访问语法如下所示: obj?.[expr] 在该语法中,如果obj的值为undefined或null,那么表达式的求值结果为undefined;否则,表达式的求值结果为obj[expr]。
可选的函数调用或方法调用
可选的函数调用或方法调用语法如下所示: fn?.() 在该语法中,如果fn的值为undefined或null,那么表达式的求值结果为undefined;否则,表达式的求值结果为fn()。
const a = {};
// 如果访问 a 属性 c , 如果是
console.log(a?.c?.()); // 结果 就是 undefined
可选链和表达式
当使用方括号与属性名的形式来访问属性时,你也可以使用可选链操作符:
let nestedProp = obj?.['prop' + 'Name'];