1

我的代码变得非常污染:

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

这有点荒谬。我追求的是这样的功能:

isProperObject( objectVar.other );

考虑到 ifobjectVar没有定义,这实际上会惨遭失败,也许我应该这样做:

isProperObject( 'objectVar.other' );

那么函数就可以eval()了。但不是!它不能这样做,因为isProperObject()将在不同的范围内,没有objectVar.

所以,它可能是:

isProperObject( objectVar, 'other' )

好的,这可以工作。有没有这样一个实际常用的功能?

4

2 回答 2

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) {
于 2013-10-12T00:50:19.807 回答
0

移动到“更高级别”的编程并将值初始化为null 或空 object

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

例如,而不是:

var dialogTitle;
var dialogId;
var dialogElement;

更喜欢在“空”状态下构建一个有效的容器对象。

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

您也可以使用if (dialog.id != null)or,当您不期望falseor0值时,if (dialog.id).

于 2013-10-12T00:57:46.437 回答