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

问题描述 投票:0回答:7

我期望以下比较会给出错误:

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

但奇怪的是它返回了

false

更奇怪的是,

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

返回

true

这种“三元”比较是如何进行的?

javascript comparison truthiness
7个回答
8
投票

首先,我们需要了解数字和布尔值之间的

==
比较将导致布尔值到数字的内部类型转换(
true
变为
1
false
变为
0

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

A == B
计算

,结果为

true
,并且您将
true
与 0 进行比较。由于在比较过程中
true
变为
1
,因此
1 == 0
计算结果为
false
。但当你说

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

A == B
true
,与数字比较时,变成
1
,您再次将其与 1 进行比较。这就是为什么它打印
true


8
投票

像=这样的赋值运算符是右关联:当存在一系列具有相同优先级的这些运算符时,它们是从右到左处理的,因此

A = B = 0
被处理为
A = (B = 0)
B = 0
返回0,所以 A 和 B 最终都为 0)。

像 == 这样的相等运算符是 左关联:相同优先级运算符从左到右处理。

A == B == 0
被处理为
(A == B) == 0
,并且由于
A == B
为 true (1),因此它变为
1 == 0
,为 false (0)。

同样,

A == B == 1
被处理为
(A == B) == 1
,变成
1 == 1
,这是正确的(1)。

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


2
投票

首先,

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


2
投票

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

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

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

1
投票

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


0
投票

我相信你在这里只需要进行两次比较,但它们确实需要是独立的。所以只需检查:

(A==B && B=0) ? {如果为 true 则发生这种情况} : {如果为 False 则发生这种情况}

这应该与三重比较相同,除非您有第三个条件,即“B === 0 and A !== 0”与“A === 0 and B !== 0”不同,从而消除了需要比较A和0。

© www.soinside.com 2019 - 2024. All rights reserved.