5

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


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

if(somethingUndefined){ }


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

if(somethingUndefined.anAttribute){ }


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

if(somethingUndefined && somethingUndefined.anAttribute){ }


还有另一种方法吗?如果程序尝试访问未定义对象的属性,可能会返回 false 的全局设置?

4

3 回答 3

1

如果您有许多类似的 if 语句if(somethingUndefined && somethingUndefined.anAttribute){ },那么您可以在未定义时为其分配一个空对象。

var somethingUndefined = somethingUndefined || {};

if (somethingUndefined.anAttribute) {

}
于 2013-09-03T03:43:58.167 回答
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?
){

}
于 2013-09-03T04:09:01.453 回答
0

您在问题中使用它的方式通常是在 javascript 中完成的方式。如果你发现自己经常使用它,你可以将它抽象成一个函数,让自己的东西变得更干净,如下所示:

if (attrDefined(obj, 'property')) {
  console.log('it is defined, whoo!');
}

function attrDefined(o, p){ return !!(o && o[p]) }
于 2013-09-03T03:49:16.173 回答