我一般不喜欢使用==但今天我只是尝试使用以下代码,包括==而且结果对我来说有点混乱。有人可以解释一下发生了什么吗?
所有这些都是假值:
'', 0, false, undefined, null
假设我做了:
if (undefined == null) {
alert('a');
} else {
alert('b');
}
以下陈述给出 true :
null == undefined
0 == ''
false == ''
0 == false
但为什么下面的代码会返回 false ?
undefined == 0
undefined == ''
null == 0
答案 0 :(得分:3)
因为0
,false
和''
是"值"虽然null
是"没有价值"而undefined
是"没有定义"。
因此,您可以比较"值"相互之间,#34;非值"相同。但你无法比较"价值观"使用"非值"。
答案 1 :(得分:0)
==
运算符不只是检查事情是否是假的;它遵循一个称为抽象等效比较算法的程序,可以在这里看到:ECMAScript spec。
undefined == 0
和 undefined == ''
:
根据规范,undefined
仅与undefined
或null
进行比较。由于0
或''
都不是这些值中的任何一个,因此返回false。
<强> null == 0
强>
根据规范,null
仅将{true}与另一个null
或undefined
进行比较 - 这两种情况都不是这样。
使用===
通常最好使用===
并进行您实际想要的比较,而不是信任==
算法,并且通常也更快。正如您所看到的那样,当算法没有达到您期望的效果时,很容易被捕获,并且通常比明确更容易跟踪比较算法将采用的路径。
有关“同一性”的一般信息&#39;在javascript中,请参阅this MDN page。
答案 2 :(得分:0)
null和undefined是虚无。即。
var a;
var b = null;
这里a和b没有值。然而:0
,false
和''
都是值。所有这些之间的共同点是,它们都是假值,这意味着它们都满足 falsy条件。
因此,0
,false
和''
共同构成了一个子群。
另一方面,null
&amp; undefined
构成第二个子组。检查下图中的比较。 null和undefined相等。其他三个将彼此相等。但是,它们都被视为JS中的虚假条件。
这与任何对象(如{}
,arrays
等)相同,非空字符串&amp;布尔值为true都是条件。但是,他们都不相同。
答案 3 :(得分:-1)
但为什么下面会给出错误?
undefined == 0
undefined == ''
null == 0
技术“为什么”是因为真值表说明了这一点。
哲学“为什么”是因为undefined
和null
是not a number
并且不是字符串。
(parseInt(undefined) -> NaN
)。
所以NaN != 0
。
但要小心:undefined != NaN
因为NaN != NaN
。仅仅因为香蕉不是新西兰人。但是Apple也不是新西兰人。香蕉仍然不是苹果。
所以avetisk的答案是正确的。你不能比较你知道它们不是什么的对象,但是你不知道它们是什么。