Javascript 愚蠢的比较

Javascript 愚蠢的比较,javascript,comparison,Javascript,Comparison,今天我在控制台中评估了一些东西,当我打字时,我正在胡思乱想,并对以下内容感到好奇: 1===1===1计算结果为false 但是 1==1==1计算结果为true 第一次比较是否试图评估整个1===1的类型 这种行为的原因是什么?简单的答案是,=尝试类型转换,而==不尝试 两个示例的评估顺序相同,如下所示: (1 === 1) === 1 (1 == 1) == 1 (1 == 1) == 1 // v v (true) == 1 // v v 1

今天我在控制台中评估了一些东西,当我打字时,我正在胡思乱想,并对以下内容感到好奇:

1===1===1
计算结果为
false

但是

1==1==1
计算结果为
true

第一次比较是否试图评估整个
1===1
的类型


这种行为的原因是什么?

简单的答案是,
=
尝试类型转换,而
==
不尝试

两个示例的评估顺序相同,如下所示:

(1 === 1) === 1
(1 == 1) == 1
(1 == 1) == 1
//  v       v
  (true) == 1
//  v       v
    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
的情况下,
true
被转换成一个数字,值
true
的数字转换总是以数字
1
结束,因此现在:

true == 1
将转换为:

1 == 1
这显然是正确的

因此,完整的演练如下所示:

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

1'表示1!=布尔值true,但第二个将布尔值true转换为1[1===1=>true===1=>false]和[x=true;x==1=>true]当然,这是有意义的。这也意味着
0==0==1
也将是真的。