存在检查子属性的最简单方法

时间:2015-06-03 08:24:50

标签: javascript

我基本上想做 var a = b.c.d || null

但问题是,a可能是undefinedb可能是,c可能是

如此简短的try{} catch{}if陈述,最好的方法是什么?这是用于从第三方数据源构建一个非常大的对象(比如50多个属性)

3 个答案:

答案 0 :(得分:2)

var a = ( b && b.c && ('d' in b.c)) ? b.c.d : null;

答案 1 :(得分:1)

var a;
if(b !== undefined && b.c !== undefined && b.c.d !== undefined){
   a = b.c.d;
} else {
 a = null;
}

<强>速记

var a = b !== undefined && b.c !== undefined && b.c.d !== undefined ? b.c.d : null

只要逻辑运算符为undefined,每个条件都将立即退出&&语句 这适用于undefined bb.c

b.c.d

我想知道您可以尝试使用boolean投射,例如

var a = !!b && !!(b.c) && !!(b.c.d) ? b.c.d : null

对于0

的值b.c.d,这将失败

答案 2 :(得分:-1)

在我看来try catch在这种情况下并不丑陋:使用try我要求代码查看bcd是否存在而且ReferenceError在这种情况下是某种“预期的行为“。请记住,异常不是必需的错误。 TurboGears有很多框架使用Exception来快速更改程序流程,而在引发错误时则不需要。