我的目标:测试对象的属性是否为/返回true。但是,在某些情况下,对象未定义。
这没问题。该脚本正常继续。
if(somethingUndefined){ }
但是,如果我尝试访问未定义对象的属性,则会生成错误并停止脚本。
if(somethingUndefined.anAttribute){ }
现在,这就是我用来解决问题的方法:
if(somethingUndefined && somethingUndefined.anAttribute){ }
还有其他办法吗?如果程序试图访问未定义对象的属性,可能会返回false的全局设置?
答案 0 :(得分:1)
如果你有许多if语句,如if(somethingUndefined && somethingUndefined.anAttribute){ }
,那么你可以在未定义的时候为它分配一个空对象。
var somethingUndefined = somethingUndefined || {};
if (somethingUndefined.anAttribute) {
}
答案 1 :(得分:1)
您可以利用JavaScript在if
条件下分配变量的能力,并且一旦超过第一个嵌套对象,就可以按照此模式进行更快速的检查。
的 JsPerf 强>
var x;
if(
(x = somethingUndefined) && // somethingUndefined exists?
(x = x.anAttribute) && // x and anAttribute exists?
(x = x.subAttrubute) // x and subAttrubute exists?
){
}
与传统
相比if(
somethingUndefined && // somethingUndefined exists?
somethingUndefined.anAttribute && // somethingUndefined and anAttribute exists?
somethingUndefined.anAttribute.subAttribute // somethingUndefined and anAttribute and subAttribute exists?
){
}
答案 2 :(得分:0)
你在问题中的方式通常是在javascript中完成的方式。如果你发现自己经常使用它,你可以把它抽象成一个函数来让事情变得更加清洁,就像这样:
if (attrDefined(obj, 'property')) {
console.log('it is defined, whoo!');
}
function attrDefined(o, p){ return !!(o && o[p]) }