JavaScript 中的双重比较看起来很奇怪
Double compare in JavaScript looks weird
我们var a = "first", b = "second", c = "first";
.
表达式 a == c
returns true
, (当然!); a == c
也是 true
。
那为什么a == a == c
returnfalse
?
例子
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>
因为真实情况是这样的:
(a == a) == c
这真的只是:
true == "first"
a == c
returns 布尔值 (true
).
因为 a
不是布尔值,所以它不可能等于 a == c
。
因为它是从左到右,一次一个 ==
并且之前每个 ==
操作的结果都是一个布尔值:
(a == a) === true
(true == c) === false
您需要做的:
a == a && a == c
或更好(因为这是 JavaScript):
a === a && a === c
或者,可以在 CoffeeScript 中编写,这将翻译:
a == a == c
进入
(a === a && a === c);
给你。
我们var a = "first", b = "second", c = "first";
.
表达式 a == c
returns true
, (当然!); a == c
也是 true
。
那为什么a == a == c
returnfalse
?
例子
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>
因为真实情况是这样的:
(a == a) == c
这真的只是:
true == "first"
a == c
returns 布尔值 (true
).
因为 a
不是布尔值,所以它不可能等于 a == c
。
因为它是从左到右,一次一个 ==
并且之前每个 ==
操作的结果都是一个布尔值:
(a == a) === true
(true == c) === false
您需要做的:
a == a && a == c
或更好(因为这是 JavaScript):
a === a && a === c
或者,可以在 CoffeeScript 中编写,这将翻译:
a == a == c
进入
(a === a && a === c);
给你。