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
也将是真的。