3

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

JSLint 更喜欢我这样做(myObject === undefined || myObject === null)

道格·克罗克福德会做什么?(WWDC)

4

3 回答 3

5

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

2) 如果 x 为空且 y 未定义,则返回 true。

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

这里xy是比较项x == y。当您比较时,只有在is或自身x == null时才会为真。xundefinednull


为了清楚起见,当我们在这里说“未定义”时,我们指的是 value undefined,而不是未定义的变量(那些在使用时会产生 ReferenceError ,除了 with typeof)。


关于 WWDCD,我将引用 Ian:Crockford 会建议 JSLint 建议的内容(显然),因为 == 对他来说是巫术。这意味着“使用===,从不==”。所以这对他来说不是问题。

于 2013-08-08T23:46:59.963 回答
2

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

是的。正如规范所定义的nullundefined是仅有的两个相等的值null

JSLint 更喜欢我这样做(myObject === undefined || myObject === null)

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

于 2013-08-08T23:52:19.623 回答
1

运行此代码:

<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>

返回了输出

variable is undefined
variable is null

所以......它似乎工作。但我似乎也记得关于 null 和 undefined 的一些奇怪的事情。或者也许那是另一种语言——一段时间后它们开始模糊在一起。

无论如何,@collapsar 给出的答案可能是最干净的方法,因为它会检查所有情况。

于 2013-08-08T23:44:45.277 回答