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

lag*_*lex 7 javascript comparison truthiness

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

var A = B = 0;
if(A == B == 0)
    console.log(true);
else
    console.log(false);
Run Code Online (Sandbox Code Playgroud)

但奇怪的是它会回归false.

更奇怪的是,

console.log((A == B == 1)); 
Run Code Online (Sandbox Code Playgroud)

回报true.

这种"三元"比较如何运作?

the*_*eye 8

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

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

A == B
Run Code Online (Sandbox Code Playgroud)

进行评价,其结果是true,你是比较true由于具有0 true变得1比较期间,1 == 0计算结果为false.但是当你说的时候

console.log((A == B == 1));
Run Code Online (Sandbox Code Playgroud)

A == Btrue,与数字相比,变成了1,你再次将它与1进行比较.这就是它打印的原因true.


kwc*_*kwc 7

像=这样的赋值运算符是右关联的:当有一系列这些运算符具有相同的优先级时,它们从右到左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