一行中的多个严格相等比较

Multiple strict equality comparisons in a single line

我有以下 JavaScript 代码:

var a = 1;
var b = 1;
a === 1        // evaluates to true
b === 1        // evaluates to true
a == b == 1    // evaluates to true
a === b === 1  // evaluates to false

为什么 a === b === 1 的计算结果为 false

a == b == 1

被评估为

((a == b) == 1)

因为 a == btrue,表达式变成

true == 1

由于==进行了类型转换,它将true转换为一个数字,变成了1。所以表达式变成了

1 == 1

这就是为什么这个表达式是 true。您可以像这样确认布尔值到数字的转换

console.log(Number(true));
// 1
console.log(Number(false));
// 0

同样,

a === b === 1

被评估为

((a === b) === 1)

所以

true === 1

因为 === 不进行类型转换(因为它是 strict equality operator),所以这个表达式是 false.