(A == B == C)比较如何在JavaScript中进行比较?

时间:2014-04-10 06:45:13

标签: javascript comparison truthiness

我期待以下比较给出错误:

var A = B = 0;
if(A == B == 0)
    console.log(true);
else
    console.log(false);

但奇怪的是它会返回false

更奇怪的是,

console.log((A == B == 1)); 

返回true

这是什么"三元"那种比较工作?

6 个答案:

答案 0 :(得分:6)

首先,我们需要了解数字和布尔值之间的==比较将导致布尔值的内部类型转换为数字(true变为1和{ {1}}变为false

您显示的表达式从左到右进行评估。所以,首先

0
评估

,结果为A == B ,您将true与0进行比较。由于true在比较期间变为true1评估为{{ 1}}。但是当你说

1 == 0

falseconsole.log((A == B == 1)); ,与数字相比,变为A == B,您将再次与1进行比较。这就是它打印true

的原因

答案 1 :(得分:6)

= =的分配运算符右关联:当有一系列具有相同优先级的运算符时,它们从右向左处理,因此处理A = B = 0 as A = (B = 0)B = 0返回0,因此A和B最终都为0)。

==等等运算符左关联:从左到右处理相同优先级运算符。 A == B == 0被处理为(A == B) == 0,由于A == B为真(1),它变为1 == 0,为假(0)。

同样,A == B == 1被处理为(A == B) == 1,变为1 == 1,这是真的(1)。

来源和更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

答案 2 :(得分:2)

首先,A == B返回true,然后将其与0进行比较,true == 0返回false,或true == 1返回true。

答案 3 :(得分:2)

它首先检查你的子句A == B,这是真的,而不是它开始检查true == 0,而0是假。所以当你检查A == B == 1时,你检查A == B,这是真的,而真是== 1.那么它返回true。如果你真的想检查所有可能性,你应该做这样的事情:

if((A==B) && (A==0))
   console.log(true);
else 
   console.log(false);

答案 4 :(得分:1)

if((A == B)&& (A== 0)&& (B==0))
    console.log(true);
else
    console.log(false);

答案 5 :(得分:1)

您可以从左到右工作。在这种情况下,首先检查A == B,然后检查是否等于0.因此,由于A == B,这是真的。所以现在变成(true == 0),这是假的。如果A = 1,B = 2,则(A == B == 0)将返回true!这是因为A == B为假,(假= = 0)为真!