我的代码受到严重污染:
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' )
好的,这可行。有这样的功能实际上是常用的吗?
答案 0 :(得分:1)
您的支票不必要地冗长。你可以这样做:
if (objectVar != null && objectVar.other != null) {
// OK, objectVar.other is an object, yay!
}
这将检查null
和undefined
,因此为您提供所需的安全保障。
或者,如果您确实需要.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)
,或者,当您不期望false
或0
值时,if (dialog.id)
。