在 Javascript 中,是myObject == null
处理未定义和空值检查的有效方法吗?
JSLint 更喜欢我这样做(myObject === undefined || myObject === null)
道格·克罗克福德会做什么?(WWDC)
在 Javascript 中,是myObject == null
处理未定义和空值检查的有效方法吗?
JSLint 更喜欢我这样做(myObject === undefined || myObject === null)
道格·克罗克福德会做什么?(WWDC)
是的,这是检查两者的好方法。语言规范声明(关于==
比较不同类型的值):
2) 如果 x 为空且 y 未定义,则返回 true。
3) 如果 x 未定义且 y 为空,则返回 true。
这里x和y是比较项x == y
。当您比较时,只有在is或自身x == null
时才会为真。x
undefined
null
为了清楚起见,当我们在这里说“未定义”时,我们指的是 value undefined
,而不是未定义的变量(那些在使用时会产生 ReferenceError ,除了 with typeof
)。
关于 WWDCD,我将引用 Ian:Crockford 会建议 JSLint 建议的内容(显然),因为 == 对他来说是巫术。这意味着“使用===
,从不==
”。所以这对他来说不是问题。
是
myObject == null
处理未定义和空值检查的有效方法吗?
是的。正如规范所定义的,null
和undefined
是仅有的两个相等的值null
。
JSLint 更喜欢我这样做
(myObject === undefined || myObject === null)
然后它不明白你的意图。这不是第一次了。或者它(和它的创建者 Crockford)希望您编写明确的代码,以便所有不了解所有 Javascript 内部结构的人都能正确理解。
运行此代码:
<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 给出的答案可能是最干净的方法,因为它会检查所有情况。