typeof()在条件开始之前分解

时间:2015-12-13 06:46:53

标签: javascript

我有一个问题......我试图为所请求的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"!

有什么建议吗? - 谢谢

2 个答案:

答案 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');