JavaScript中的双重比较看起来很奇怪

时间:2015-06-22 18:19:24

标签: javascript boolean compare boolean-expression

我们var a = "first", b = "second", c = "first"; 表达式a == c返回true,(当然!); a == c也是true 那么为什么a == a == c会返回false

示例

var a = "first", b = "second", c = "first";

write( a != b != c );
write( a == b != c );
write( a == b == c );
write( a != b == c );
write("");
write( a == a == c );

// -------------------
function write(val) {document.querySelector("console").innerHTML += "<hr noshade size='1px' color='#eee'>" + String(val);}
<console></console>

3 个答案:

答案 0 :(得分:3)

因为真正发生的是:

(a == a) == c

这真的只是:

true == "first"

请参阅Operator Precedence

答案 1 :(得分:1)

因为它从左到右,一次只有一个import pandas as pd import numpy as np index = 'A A A B B C D D'.split() col1 = [120, 90, 80, 80, 50, 120, 150, 150] ser = pd.Series(col1, index=index) # use groupby and keep the first element ser.groupby(level=0).first() Out[200]: A 120 B 80 C 120 D 150 dtype: int64 ,并且每个前一个==操作的结果都是布尔值:

==

你需要这样做:

(a == a) === true
(true == c) === false

或更好(因为这是JavaScript):

a == a && a == c

或者,可以写入 CoffeeScript ,它将翻译:

a === a && a === c

a == a == c

给你。

答案 2 :(得分:0)

a == c返回一个布尔值(true)。

由于a不是布尔值,因此它不可能等于a == c

相关问题