考虑以下嵌套数据结构:
var options = {
option1 = {
option1a : "foo",
option1b : "bar"
},
option2 = {},
}
我有一个类似于上面的数据结构,我将其用作函数输入的可选参数列表。由于所有这些都是可选输入,因此它可能存在也可能不存在。最初,我使用typeof x == "undefined"
语句链来确保例如 、options
和option1
都已option1a
定义。我的代码最终看起来像这样定义一个变量:
if(typeof option != "undefined"
&& typeof option.option1 != "undefined"
&& typeof option.option1.option1a != "undefined){
var x = option.option1.option1a;
} else {
var x = "default";
};
我注意到我可以将其缩短为以下内容:
var x = option && option.option1 && option.option1.option1a || "default";
是否&&
始终如一地返回最后一个真或第一个假陈述?并且是否||
始终如一地返回第一个真实的陈述?逻辑会规定它们可以在某些实现中返回布尔值,但我对浏览器 / javascript 实现知之甚少,无法明确做出该声明。这是一种安全的方法吗,还是有更好的方法?