0

在 javascript 中,我有一个对象的属性,只有当它可用时才尝试访问它,因此在使用该对象之前我会进行有条件的 null/undefined 检查。

if( object !== undefined && object != null ) // Occurs in IE8
{
    // Use object
    // Object.someProperty
}

在 FF 和 Chrome 上,定义的行为符合预期。当他们看到 object 为 null 时,它不会进入 if 语句。但是,在 IE 中,它抱怨不应访问“someProperty”,因为 Object 为空,并且无论如何都会进入。但这就是我有条件检查的原因,FF & Chrome 意识到了这一点。

我的问题是,当有条件检查停止它时,为什么即使在if 语句中尝试使用该对象执行行?

此外,该问题的解决方案如下:

if( object !== undefined && object != null && true )
{
    // Use object
    // Object.someProperty
}

注意未定义和空检查后的“&& true”。这似乎迫使 IE 意识到条件应该真正评估为假,并且它按预期工作。

因此,尽管似乎有一种方法可以“让它发挥作用”,但我的上述问题仍然存在。

提前谢谢各位!

4

1 回答 1

2

object仅当您未定义或声明它时才应为 undefined,并且objectnull当您将其显式设置为时才应为null.

object一个例子undefined

var object;

object一个例子null

var object = null;

我检查它的方式是:

if (object) {

}

这将确保这object不是虚假的。假的,它是以下值之一:

false
0
-0
""
null
undefined
NaN

如果你不确定它object是否被声明过,你需要检查它的类型:

if (typeof object !== "undefined") {

}

但是,如果您还需要查看它是否不为空,请使用:

if (typeof object !== "undefined" && object !== null) {

}

当然,您可以将typeof支票与真实情况结合起来:

if (typeof object !== "undefined" && object) {

}

如果您需要稍后检查它是否具有属性,请使用:

if ("someProperty" in object) {

}
于 2013-04-17T15:58:49.407 回答