javascript 是否有可选的索引运算符?

Cai*_*ard 1 javascript

有时我有:

let a = { b: { c1: { z: false } } }
Run Code Online (Sandbox Code Playgroud)

其他时候我有:

let a = { b: { c2: { z: false } } }
Run Code Online (Sandbox Code Playgroud)

我有let n = 'c1'let n = 'c2'

我可以这样做来传播未定义的:

a?.b[n]?.z
Run Code Online (Sandbox Code Playgroud)

if(a.b) ...除此之外,如果b未定义,我可以做任何速记吗?

?[似乎没有,我认为我也做不到a['b'][n]?.z,因为如果没有 b 那么尝试对其进行索引n导致无法读取 undefined 的属性 VALUE_OF_N

Poi*_*nty 5

是的:

a?.b?.[n]?.z
Run Code Online (Sandbox Code Playgroud)

?.操作员可以一个之前使用[ ]的表达。它看起来很奇怪,但?.它本身就是一个完整的标记,所以它在语法上是有道理的。换句话说,?.通常不只是普通.运算符前面的问号;它本身就是一个完整的运营商。