我试图缩短以下代码:
var a = 0, b = 0;
function() {
return a === 0 && b === 0; // returns 'true'
}
所以,我认为以下内容会发生:
var a = 0, b = 0;
function() {
return a === b === 0; // returns 'false'
}
最初,我认为这样的语法会引发错误,但显然会返回 false
。为什么 a === b === 0
会返回 false
?
答案 0 :(得分:10)
表达式a === b === 0
被解释为写成(a === b) === 0
。结果为false
,因为(a === b)
提供true
,而true
不是===
给0
。
可以想象一种编程语言可以理解由==
或===
或其他任何东西连接的表达式链,这意味着所有值都应该在一个大的“组相等”比较中进行比较。但是,JavaScript并不是一种语言。
答案 1 :(得分:6)
这是由于如何评估运营商。在JavaScript中,从左到右(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)
评估相等运算符这意味着:
a === b === 0
一步之后就成为了这个:
true === 0
由于数字零不等于布尔值true,因此表达式返回false。