Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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中,myObject==null是否也是处理未定义检查的有效方法?_Javascript - Fatal编程技术网

在Javascript中,myObject==null是否也是处理未定义检查的有效方法?

在Javascript中,myObject==null是否也是处理未定义检查的有效方法?,javascript,Javascript,在Javascript中,myObject==null是处理未定义和null检查的有效方法吗 JSLint希望我执行(myObject==undefined | | myObject==null) 道格·克罗克福德会怎么做?(WWDCD)运行此代码: <html> <head> <script type="text/javascript"> function test() { var variable = undefined; if (typ

在Javascript中,
myObject==null
是处理未定义和null检查的有效方法吗

JSLint希望我执行
(myObject==undefined | | myObject==null)

道格·克罗克福德会怎么做?(WWDCD)

运行此代码:

<html>
<head>
<script type="text/javascript">
function test() {
    var variable = undefined;

    if (typeof variable === 'undefined') console.log("variable is undefined");
    if (variable == null) {
        console.log("variable is null");
    } else {
        console.log("variable is not null");
    }
}
</script>
</head>
<body onLoad="test()">
</body>
所以。。。它似乎起作用了。但我似乎还记得null与undefined之间的一些奇怪之处。或者可能是用另一种语言,过了一段时间,他们开始模糊在一起


不管怎样,@collapsar给出的答案可能是最干净的方法,因为它可以检查所有情况。

是的,这是检查两者的好方法。语言规范(关于比较不同类型值的
=
):

2) 如果x为null而y未定义,则返回true

3) 如果x未定义且y为null,则返回true

这里x和y是比较的术语
x==y
。在比较
x==null
时,只有
x
未定义或
null
本身时,才是真的


需要明确的是,当我们在这里说“undefined”时,我们指的是值
undefined
,而不是未定义的变量(这些变量在使用时会产生引用错误,除了
typeof


关于WWDCD,我将引用Ian:Crockford的话,他会提出JSLint的建议(显然),因为==对他来说是巫毒。这意味着“使用
==
,永远不要使用
==
”。所以这对他来说不是问题

myObject==null
是处理未定义和null检查的有效方法吗

对。因此,
null
undefined
是唯一两个等于
null
的值

JSLint希望我执行
(myObject==undefined | | myObject==null)


那它就不明白你的意图了。这不是第一次了。或者它(及其创建者Crockford)希望您编写明确的代码,让不了解所有Javascript内部结构的所有人都能正确理解。

是的,这是检查两者的一种方法。Crockford会提出JSLint的建议(很明显),因为
==
是他的伏都教WWDCD===JSLint的建议。@Fabricio Matté还是
=
?Hehe@Ian不,Crockford和
=
在同一个表达式中会产生语法错误<代码>;)@Fabricio MattéSnap,你说得对+1为简单起见
==null
是测试
未定义的
null
值的最简单方法,这也是jQuery内部使用的方法。请注意,尝试与未定义的变量进行比较会引发类型引用错误(
typeof
)<代码>:P
@Ian从你的评论中添加了一段引语(你说得很好),再加上一点额外的解释。@bFavareto Cool,没有理由引用我的话,但谢谢:)我只是认为完全忽略
=
是愚蠢的,因为这是一个很好的用例(尽管它可以很容易地更改为
==未定义的| |===null
)但这一点都不好玩,而且仅仅为了一个目的就必须关闭
==
检测功能也很糟糕this@bfavaretto我不是。你的回答全面而正确,我的回答既不全面也不正确。对不起,措辞含糊不清。
variable is undefined
variable is null