我有一个问题......我试图为所请求的json对象编写一个后备:
if( typeof(json.locationData.google.results[1].formatted_address) === 'undefined' ) {
console.log('is undefined');
} else {
console.log('is not undefined', json.locationData.google.results[1].formatted_address);
}
结果:
未捕获(在承诺中)TypeError:无法读取属性' formatted_address'未定义的(...)
@line of" typeof(json.locationData.google.results [1] .formatted_address)===' undefined'"
当然它未定义,但在这种情况下我想要控制台输出"是的,它是fkn undefined"!
有什么建议吗? - 谢谢
答案 0 :(得分:1)
仔细阅读错误消息:Cannot read property
'formatted_address'
of undefined
。这意味着具有属性formatted_address
的对象未定义。因此,在您的代码中,您需要首先检查:
if( typeof(json.locationData.google.results[1]) === 'undefined' ||
typeof(json.locationData.google.results[1].formatted_address) === 'undefined' ) {
// ...
}
或者为了检查typeof
是否未定义,您可以反转if并检查truthy值:
if(json.locationData.google.results[1] && json.locationData.google.results[1].formatted_address) {
// this code block is executed when results[1] and formatted_address
// both have a truthy value
} else {
// if either results[1] or formatted_address are undefined
// then this code block is executed
}
答案 1 :(得分:0)
如果初始对象存在,那么您可以传递每个属性或空对象({}),直到命中最终属性。
仅在属性为假时使用{},例如null或undefined。您可以随意输入此语法。
有几种方法可以做到这一点: //主要对象必须存在 if(typeof json =='undefined'){ var json = {}; }
var exists = ((((json.locationData||{}).google||{}).results||{})[1]||{}).formatted_address;
//then
console.log(exists ? ('is not undefined', json.locationData.google.results[1].formatted_address) : 'is undefined');
// or
exists && console.log('is not undefined', json.locationData.google.results[1].formatted_address);
!exists && console.log('is undefined');
// or
exists ? console.log('is not undefined', json.locationData.google.results[1].formatted_address) : console.log('is undefined');