JS:如果访问未定义对象的属性,则防止出错

时间:2013-09-03 03:37:28

标签: javascript

我的目标:测试对象的属性是否为/返回true。但是,在某些情况下,对象未定义。


这没问题。该脚本正常继续。

if(somethingUndefined){ }


但是,如果我尝试访问未定义对象的属性,则会生成错误并停止脚本。

if(somethingUndefined.anAttribute){ }


现在,这就是我用来解决问题的方法:

if(somethingUndefined && somethingUndefined.anAttribute){ }


还有其他办法吗?如果程序试图访问未定义对象的属性,可能会返回false的全局设置?

3 个答案:

答案 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]) }