有时我有:
let a = { b: { c1: { z: false } } }
其他时候我有:
let a = { b: { c2: { z: false } } }
我有 let n = 'c1'
或 let n = 'c2'
我可以这样做来传播未定义的:
a?.b[n]?.z
但是除了 if(a.b) ...
之外,如果 b
未定义,我可以做任何速记吗?
似乎没有 ?[
,我也不认为我可以做 a['b'][n]?.z
,因为如果没有 b 那么尝试在其上索引 n
将导致无法读取未定义的属性 VALUE_OF_N ?
最佳答案
是的:
a?.b?.[n]?.z
?.
运算符可以用在 [ ]
表达式之前。它看起来很奇怪,但是 ?.
本身就是一个完整的标记,所以它在语法上是有意义的。换句话说,?.
通常不仅仅是通常的 .
运算符之前的问号;它本身就是一个完整的运算符。
let a;
let n;
a = { b: { c1: { z: false } } }
n = 'c1';
console.log(a?.b[n]?.z);
a = { b: { c2: { z: false } } }
n = 'c2';
console.log(a?.b?.[n]?.z);
关于javascript - javascript 是否有可选的索引运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64231352/