Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有条件支票_Javascript_Internet Explorer_If Statement_Cross Browser - Fatal编程技术网

Javascript 有条件支票

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

在javascript中,我只有在对象可用时才尝试访问该对象的属性,因此在使用该对象之前,我会进行条件null/未定义检查

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