我今天正在评估控制台中的某些东西,当我打字并且对以下内容感到好奇时,我正在搞乱:
1 === 1 === 1
评估为false
但
1 == 1 == 1
评估为true
第一次比较试图评估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