为什么null == undefined在javascript中为真

时间:2013-05-17 11:22:53

标签: javascript

如果我们alert(null==undefined)输出到true

这是什么原因。

这是用javascript进行硬编码的,还是有解释。

4 个答案:

答案 0 :(得分:21)

语言规范explicitly says

  

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

我不知道语言设计过程的任何记录解释了该决定的推理,但==有处理不同类型的规则,“null”和“undefined”都是意思“没有”,所以让它们相等就是直觉。

(如果您不想要类型摆弄,请改用===)。

答案 1 :(得分:4)

出于同样的原因,0 == "0" - javascript被松散地输入 - 如果某些内容可以转换为其他内容,那么除非您使用===

alert(null===undefined);

会给你假的。

至于为什么这些特定的转换发生 - 答案很简单“规范说应该发生的事情”。对于编程语言在某些方面表现的原因,除了“因为它如此说明”之外,不需要理由。

答案 2 :(得分:4)

使用双等于运算符强制Javascript执行类型强制。

换句话说,当您执行x == y时,如果xy的类型不同,则JavaScript会在比较之前将一个值转换为另一个值,例如字符串和数字比较,字符串总是被转换为数字然后进行比较

因此,JavaScript中混合类型的许多比较可能会导致结果出现意外或反直觉。

如果你想在JavaScript中进行比较,通常最好使用三等运算符===而不是双等号。这不是一种类型强制;相反,如果类型不同,则返回false。这通常是你需要的。

如果你绝对确定你需要它,你应该只使用双倍相等。

答案 3 :(得分:-3)

==比较运算符不检查类型。 nullundefined都返回false。这就是为什么您的代码实际上会检查false是否等于false

> null == undefined;
< true
> false == false
< true

然而他们的类型并不相同。

> typeof undefined;
< "undefined"
> typeof null;
< "object"

因此,下一个语句将返回false,因为===比较运算符会检查类型及其值。

> undefined === null;
< false