傻JS比较

时间:2014-12-05 15:45:59

标签: javascript comparison

我今天正在评估控制台中的某些东西,当我打字并且对以下内容感到好奇时,我正在搞乱:

1 === 1 === 1评估为false

1 == 1 == 1评估为true

第一次比较试图评估1 === 1的整体类型吗?

这种行为的原因是什么?

1 个答案:

答案 0 :(得分:1)

简单的答案是,==会尝试输入转化次数,而===则不会。

两个例子的评价顺序是相同的,如下所示:

(1 === 1) === 1
(1 == 1) == 1

首先进行=====比较,并将其结果用作第二个=====的操作数。像这样:

(1 === 1) === 1
//  v         v
  (true)  === 1


(1 == 1) == 1
//  v       v
  (true) == 1

所以你可以看到我们现在正在谈论:

true === 1

true == 1

所以不同的结果源于这样的事实:正如我上面提到的,===不会尝试转换任何类型,而==会尝试将它们转换为匹配类型。

因此,如果没有转换,true === 1显然将是false,因为它们不是相同的值,但在true == 1的情况下,{{1}转换为数字,值true的数字转换最终会以数字true结束,所以现在这样:

1

转换为:

true == 1

这显然是正确的。

所以完整的演练是这样的:

1 == 1