当==使用而不是===时输入类型

时间:2014-04-14 09:09:11

标签: javascript casting comparison operators

我一般不喜欢使用==但今天我只是尝试使用以下代码,包括==而且结果对我来说有点混乱。有人可以解释一下发生了什么吗?

所有这些都是假值:

'', 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

4 个答案:

答案 0 :(得分:3)

因为0false''是"值"虽然null是"没有价值"而undefined是"没有定义"。

因此,您可以比较"值"相互之间,#34;非值"相同。但你无法比较"价值观"使用"非值"。

答案 1 :(得分:0)

==运算符只是检查事情是否是假的;它遵循一个称为抽象等效比较算法的程序,可以在这里看到:ECMAScript spec

undefined == 0 undefined == ''

根据规范,undefined仅与undefinednull进行比较。由于0''都不是这些值中的任何一个,因此返回false。

<强> null == 0

根据规范,null仅将{true}与另一个nullundefined进行比较 - 这两种情况都不是这样。

使用===

通常最好使用===并进行您实际想要的比较,而不是信任==算法,并且通常也更快。正如您所看到的那样,当算法没有达到您期望的效果时,很容易被捕获,并且通常比明确更容易跟踪比较算法将采用的路径。

有关“同一性”的一般信息&#39;在javascript中,请参阅this MDN page

答案 2 :(得分:0)

null和undefined是虚无。即。

var a;
var b = null;

这里a和b没有值。然而:0false''都是值。所有这些之间的共同点是,它们都是假值,这意味着它们都满足 falsy条件。

因此,0false''共同构成了一个子群。

另一方面,null&amp; undefined构成第二个子组。检查下图中的比较。 null和undefined相等。其他三个将彼此相等。但是,它们都被视为JS中的虚假条件。

enter image description here

这与任何对象(如{}arrays等)相同,非空字符串&amp;布尔值为true都是条件。但是,他们都不相同。

答案 3 :(得分:-1)

  

但为什么下面会给出错误?

undefined == 0
undefined == ''
null == 0

技术“为什么”是因为真值表说明了这一点。

哲学“为什么”是因为undefinednullnot a number并且不是字符串。

parseInt(undefined) -> NaN)。

所以NaN != 0

但要小心:undefined != NaN因为NaN != NaN。仅仅因为香蕉不是新西兰人。但是Apple也不是新西兰人。香蕉仍然不是苹果。

所以avetisk的答案是正确的。你不能比较你知道它们不是什么的对象,但是你不知道它们是什么。