在一行中进行多次严格的相等比较

时间:2016-01-18 01:41:16

标签: javascript types equality

我有以下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

1 个答案:

答案 0 :(得分:3)

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