如果我们alert(null==undefined)
输出到true
。
这是什么原因。
这是用javascript进行硬编码的,还是有解释。
答案 0 :(得分:21)
语言规范explicitly says:
如果x为null且y未定义,则返回true
我不知道语言设计过程的任何记录解释了该决定的推理,但==
有处理不同类型的规则,“null”和“undefined”都是意思“没有”,所以让它们相等就是直觉。
(如果您不想要类型摆弄,请改用===
)。
答案 1 :(得分:4)
出于同样的原因,0 == "0"
- javascript被松散地输入 - 如果某些内容可以转换为其他内容,那么除非您使用===
alert(null===undefined);
会给你假的。
至于为什么这些特定的转换发生 - 答案很简单“规范说应该发生的事情”。对于编程语言在某些方面表现的原因,除了“因为它如此说明”之外,不需要理由。
答案 2 :(得分:4)
使用双等于运算符强制Javascript执行类型强制。
换句话说,当您执行x == y
时,如果x
和y
的类型不同,则JavaScript会在比较之前将一个值转换为另一个值,例如字符串和数字比较,字符串总是被转换为数字然后进行比较
因此,JavaScript中混合类型的许多比较可能会导致结果出现意外或反直觉。
如果你想在JavaScript中进行比较,通常最好使用三等运算符===
而不是双等号。这不是一种类型强制;相反,如果类型不同,则返回false。这通常是你需要的。
如果你绝对确定你需要它,你应该只使用双倍相等。
答案 3 :(得分:-3)
==
比较运算符不检查类型。 null
和undefined
都返回false
。这就是为什么您的代码实际上会检查false
是否等于false
。
> null == undefined;
< true
> false == false
< true
然而他们的类型并不相同。
> typeof undefined;
< "undefined"
> typeof null;
< "object"
因此,下一个语句将返回false,因为===
比较运算符会检查类型及其值。
> undefined === null;
< false