一行中的多个严格相等比较
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 == b
是 true
,表达式变成
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
.
我有以下 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 == b
是 true
,表达式变成
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
.