为什么null == undefined会评估为true?

6
我有以下一段代码,但是我并不理解它的意思。
var a = null; 
if(a==undefined)
alert("true");
else 
alert("false");

当我运行上面的代码时,它会弹出true。有人能解释一下这背后的原因或概念吗?

3
请使用 === 代替 == ;-) - Álvaro González
null 的数据类型是 "object",而 undefined 的数据类型是 "undefined"。我认为 null 和 undefined 没有相似之处,那么为什么会输出 true 呢? - Vijay Barnwal
嗨,阿尔瓦罗,是的,我知道“ ===”比较值和数据类型,但在我的情况下,我只检查null和undefined之间的值,怎么可能null和undefined具有相同的值?这是否存在任何概念或者是我的理解上出现了混淆? - Vijay Barnwal
谢谢Spencer,我收到你的答复了,真的解决了我的困惑。 - Vijay Barnwal
谢谢T.J.,但您能否详细说明JavaScript中“loosely equal”一词的含义? - Vijay Barnwal
显示剩余2条评论
6个回答

13
这是真的,因为 == 是“松散”相等运算符,而nullundefined是松散相等的(null == undefined为true)。如果使用严格相等运算符 === ,则它们不相等(null === undefined为false)。

基本上,如果不同类型的操作数,则“松散”相等运算符将强制转换它们(请参见规范中的抽象相等比较)。例如,0 ==“”是true,因为如果将“”强制转换为数字,则为0。严格相等运算符认为不同类型的操作数不相等(请参见严格相等比较);它不强制转换。


在浏览器中,有一个第三个值与nullundefined相等:document.alldocument.all在各种规范操作中的行为类似于undefined。这是为了确保使用if(document.all)或类似语句来执行IE特定代码的旧代码不会在现代浏览器上执行,因为它们回避的功能在处理document.all的IE版本上存在。这在规范中定义


这应该是被接受的答案。规则也在mozilla开发者网络中说明了。 - Kanagu

0

== 运算符的 规范 定义为 null == undefined 返回 true


0

-1

undefined 表示变量未被定义或赋值。 null 是 JavaScript 中的一个特殊对象

使用等于号 == 进行比较将始终返回true,因为它们在值上基本相同 (0、nothing、nada、zip)

然而,使用严格等于号 === 将返回false,因为 null 是一个对象,而 undefined 只是一个空白的变量


-1

如果一个变量指向空值,它就是null。这在概念上类似于未初始化的未定义变量。

Javascript解释器将其解释为松散相等(==)以相同的方式处理null和undefined。严格相等(===)更加挑剔;如果您有不同的数据类型,例如null和undefined,它们将不相等。

请参见JavaScript中null和undefined之间的区别是什么?了解undefined和null之间的区别以及在JavaScript比较中应该使用哪个等于运算符(== vs ===)?


-1

这种行为源于JavaScript是一种弱类型语言。在相等性的情况下,这意味着可以比较不同数据类型的值。

nullundefined都被认为是“假”,因此它们被松散地视为相等。

从逻辑上讲,如果null == falseundefined == false,那么null == undefined


"null和undefined都被认为是“falsy”,因此它们被松散地视为相等。" 不是的,许多falsy值彼此之间并不松散相等。0 == nullfalsefalse == undefinedfalseNaN == ""false,... - T.J. Crowder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接