(A == B == C) 比较在 JavaScript 中是如何工作的?

IT技术 javascript comparison truthiness
2021-03-17 08:19:31

我期待以下比较会出错:

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

但奇怪的是它返回false

更奇怪的是,

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

返回true

这种“三元”比较是如何工作的?

6个回答

首先,我们需要了解==数字和布尔值的比较会导致布尔值到数字的内部类型转换(true变成1false变成0

您显示的表达式是从左到右计算的。所以,首先

A == B

被评估并且结果是true并且您正在true与 0进行比较由于在比较期间true变成1,因此1 == 0评估为false但是当你说

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

A == Bis true,当与 number 相比时,它变成了1,你再次将它与 1 进行比较。这就是为什么它打印true.

= 等赋值运算符是右结合的:当有一系列具有相同优先级的运算符时,它们从右到左进行处理,因此A = B = 0处理为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

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

它首先检查您的子句是否为 A == B,这是真的,然后它开始检查 true == 0,而 0 是假的。因此,当您检查 A == B == 1 时,您检查 A==B,这是真的,并且 true == 1。然后它返回 true。如果你真的想检查所有的可能性,你应该做这样的事情:

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