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

AMY*_*AMY 6 javascript comparison casting operators

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

所有这些都是虚假的价值观:

'', 0, false, undefined, null
Run Code Online (Sandbox Code Playgroud)

假设我做了:

if (undefined == null) {
    alert('a');
} else {
    alert('b');
}
Run Code Online (Sandbox Code Playgroud)

以下陈述适用:

null == undefined
0 == ''
false == ''
0 == false
Run Code Online (Sandbox Code Playgroud)

但为什么下面的代码返回false?

undefined == 0
undefined == ''
null == 0
Run Code Online (Sandbox Code Playgroud)

Phi*_*l H 0

操作==员不仅仅检查事物是否是假的,还检查事物是否是假的。它遵循一个称为“抽象相等比较算法”的过程,可以在此处查看:ECMAScript 规范。

undefined == 0和undefined == '':

根据规范,undefined仅将 true 与undefinedor进行比较null。由于两者都不是0或''不是这些值中的任何一个,因此它返回 false。

null == 0

根据规范,null仅与另一个null或与true 进行比较undefined- 这里的情况都不是。

使用===

通常,最好使用===并进行您实际想要的比较,而不是信任算法==,而且通常也更快。正如您所看到的,当算法没有按照您的预期进行操作时,很容易被发现,而且明确说明通常比跟踪比较算法将采用哪条路径更简单。

有关 javascript 中“相同性”的一般信息,请参阅此 MDN 页面。