查看是否定义了复杂对象变量(objectVar.some.other.value)的简单方法

时间:2013-10-12 00:47:37

标签: javascript object scope

我的代码受到严重污染:

if( typeof( objectVar ) === 'object' && objectVar !== 'null' )
  if( typeof( objectVar.other ) === 'object' && objectVar.other !== 'null' )
     // OK, objectVar.other is an object, yay!
   }
 }

这有点荒谬。我正在读一个如下所示的函数:

isProperObject( objectVar.other );

考虑到如果没有定义objectVar,这实际上会失败,也许我应该这样做:

isProperObject( 'objectVar.other' );

然后该函数可以eval()。但不是!它不能这样做,因为isProperObject()将在不同的范围内,一个没有objectVar

所以,它可能是:

isProperObject( objectVar, 'other' )

好的,这可行。有这样的功能实际上是常用的吗?

2 个答案:

答案 0 :(得分:1)

您的支票不必要地冗长。你可以这样做:

if (objectVar != null && objectVar.other != null) {
   // OK, objectVar.other is an object, yay!
}

这将检查nullundefined,因此为您提供所需的安全保障。

或者,如果您确实需要.other作为对象:

if (objectVar && typeof objectVar.other === "object") {
   // OK, objectVar.other is an object, yay!
}

此外,您应该测试:

!== null

而不是:

!== 'null'

这是一种不同的,新颖的方法:

if((objectVar || {}).other != null) {

答案 1 :(得分:0)

转到编程的“更高级别”并将值初始化为 null或空对象

您应该使用初始化为可用值的顶级和中级对象,因此您知道存在。只有“叶子”对象可能处于空/空状态。

例如,而不是:

var dialogTitle;
var dialogId;
var dialogElement;

喜欢以“空”状态构建有效的容器对象。

var dialog = {
    title: null,
    id: null,
    element: null
};

您还可以使用if (dialog.id != null),或者,当您不期望false0值时,if (dialog.id)