Javascript 有条件支票
在javascript中,我只有在对象可用时才尝试访问该对象的属性,因此在使用该对象之前,我会进行条件null/未定义检查Javascript 有条件支票,javascript,internet-explorer,if-statement,cross-browser,Javascript,Internet Explorer,If Statement,Cross Browser,在javascript中,我只有在对象可用时才尝试访问该对象的属性,因此在使用该对象之前,我会进行条件null/未定义检查 if( object !== undefined && object != null ) // Occurs in IE8 { // Use object // Object.someProperty } 在FF和Chrome上,定义的行为与预期一致。当他们看到对象为null时,它不会进入if语句中。然而,在IE中,它抱怨不应该访问“som
if( object !== undefined && object != null ) // Occurs in IE8
{
// Use object
// Object.someProperty
}
在FF和Chrome上,定义的行为与预期一致。当他们看到对象为null时,它不会进入if语句中。然而,在IE中,它抱怨不应该访问“someProperty”,因为对象为null,并且无论如何都会被访问。但这就是为什么我的有条件检查在那里,FF&Chrome意识到了这一点
我的问题是,为什么即使在if语句中,当有条件检查阻止它时,它也试图使用对象执行行?
此外,此问题的解决方案如下所示:
if( object !== undefined && object != null && true )
{
// Use object
// Object.someProperty
}
注意未定义和空检查后的“&&true”。这似乎迫使IE意识到条件应该真的评估为false,并且它按照预期工作
因此,尽管似乎有一种方法可以“让它发挥作用”,但我的上述问题仍然存在
提前谢谢各位
对象
只有在未定义或声明它时才应该是未定义的,而对象
只有在显式将其设置为null
时才应该是null
对象
为未定义
的示例:
var object;
object
为null
的示例:
var object = null;
我检查它的方法是:
if (object) {
}
这将确保对象
不是错误的。若为假,则为以下值之一:
false
0
-0
""
null
undefined
NaN
如果您不确定是否曾经声明过对象
,则需要检查其类型:
if (typeof object !== "undefined") {
}
但如果您还需要查看它是否为null,则使用:
if (typeof object !== "undefined" && object !== null) {
}
当然,您可以将检查的类型与它的真实性结合起来:
if (typeof object !== "undefined" && object) {
}
如果以后需要检查它是否具有属性,请使用:
if ("someProperty" in object) {
}
这只是IE8吗?您是否尝试过其他IE版本?请展示对象
是如何显示我们可以复制的真实测试用例。通常对象!=空
就足够了,因为与null
的松散比较也会强制键入undefined
undefined!=null//false
,因此您不需要==如果您是,请检查未定义的=代码>检查null
。让我试着在JSFIDLE上重现这一点NaN
和-0
也是错误的。@MikeSamuel在你发表评论之前,我确实意识到NaN
是错误的。但是我没有想到-0
。我将两者相加。谢谢:)我已经尝试过“typeof obj!==”undefined“,而我第一次尝试解决这个问题时,实际使用了if(!obj)。几乎使用了每种类型的无效数据检查,以确保它不会出现在if语句中。我试图在JSFIDLE上复制它。不过我不知道那些非虚假的值,谢谢。@Ryan,我打错了…我的意思是说我会使用if(object){
-注意这里没有!
。但是,是的,如果if
语句中的任何虚假值都会计算为false…它们不等于false