我基本上想做
var a = b.c.d || null
但问题是,a
可能是undefined
,b
可能是,c
可能是
如此简短的try{} catch{}
或if
陈述,最好的方法是什么?这是用于从第三方数据源构建一个非常大的对象(比如50多个属性)
答案 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
b
和b.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来快速更改程序流程,而在引发错误时则不需要。