问题描述
let obj = { 'key1' : 'value1','key2 : { 'key2a' : 'value2a' } }
if(obj) {
if(obj.key2) {
if(obj.key2.key2a) {
return obj.key2a;
}
}
}
因此,在Google Chrome控制台中,我尝试了以下操作,以更简单的方式实现了该功能,并且效果很好...
obj?.key2?.key2a? obj.key2.key2a : '0'
如果我在nodejs @ 12中尝试它,则会给我语法错误。
有人可以帮助我理解这种差异吗?
解决方法
我认为您有一个简单的错字。 您正在用这种方式检查
if(obj) {
if(obj.key2) { // <- obj.key2 here
if(obj.key2a) { // <- but checking another property on the same level too
return obj.key2a;
}
}
}
我想你是说
if(obj) {
if(obj.key2) { // <- obj.key2 here
if(obj.key2.key2a) { // <- now safely access child property here
return obj.key2.key2a;
}
}
}
或更短
if (obj && obj.key2 && obj.key2.key2a) {
// ...
}
或
var result = obj && obj.key2 && obj.key2.key2a || "0";