2013-05-17 142 views
7

如果我们将alert(null==undefined)输出到true为什么null == undefined在javascript中为true

这是什么逻辑原因。

这是硬编码在JavaScript中的东西还是有这个解释。

+1

烨......你能给我一些材料,它说什么的原因,并不仅仅是它等于:P – Nav

+0

我会说,因为不确定意味着什么aswel,如果你的DIV不有一个ID,它是未定义的,或者我们可以说,不存在,空,无效。 –

+0

你可以请解释如何==实际上运行时,它归结为比较undefined和null – Nav

回答

15

语言规范explicitly says

如果x为空,y是不确定的,返回true

我不知道的解释推理的语言设计过程中的任何记录该决定,但==有处理不同类型的规则,“空”和“未定义”都是“无”意思,所以让它们相等是很直观的。

(如果您不想键入小提琴,请使用===代替)。

+0

所以你的意思是说它是硬编码的吧? – Nav

+1

错,是的。它是核心语言的一部分。 – Quentin

+0

告诉我一件事......当我们使用==类型是平等的,然后检查平等权吗?未定义的类型是未定义的,并且null的类型是对象然后是对象==未定义? – Nav

4

出于同样的原因,0 == "0" - JavaScript是弱类型 - 如果事情可以转换成别的东西那么这将是除非你使用===

alert(null===undefined); 

会给你假的。

至于为什么这些特定的转换发生 - 答案很简单“规范说这是应该发生的事情”。除了“因为它这么说”之外,并不需要有其他理由,因为编程语言为什么会以某种方式运行。

+1

你能解释什么是被转换成什么? – Nav

+1

因为多数民众赞成什么语言规范应该发生。除了“文档如此说明”之外,不需要有其他的理由。 – PhonicUK

3

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

换句话说,当你做x == y,如果xy是同一类型的不,JavaScript的一个值转换为另一个比较之前,就像如果字符串和数字进行比较,字符串总是被铸造成数然后进行比较

由于这个原因,JavaScript中混合类型的许多比较可能导致可能意外或违反直觉的结果。

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

如果您完全肯定您需要,您只能使用双等号。

+0

这应该是最好的答案。很好的解释! –

-3

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

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

但是它们的类型并不相同。

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

正因为如此,下面的语句将返回false,因为===比较操作检查两种类型及其价值。

> undefined === null; 
< false 
+0

为什么选择倒票?请解释.. – Broxzier

+1

正如Quentin的答案所解释的那样,答案是“只需要布尔值,数字或需要检查的数据字符串”就是不正确的。 'null'和'undefined'不会被转换为另一种类型,他们有自己的规则。 –

+0

@AshBurlaczenko现在更新我的答案。 – Broxzier

相关问题