在检查chrome控制台时运行以下语句会返回奇怪的结果。
0.5< 0.6< 0.7 =>返回false
1.5< 1.6< 1.7 =>返回true
任何人都可以解释这种行为吗?
alert("0.5 < 0.6 < 0.7 = " + (0.5 < 0.6 < 0.7));
alert("1.5 < 1.6 < 1.7 = " + (1.5 < 1.6 < 1.7));
答案 0 :(得分:7)
表达式
0.5 < 0.6 < 0.7
像这样评估
(0.5 < 0.6) < 0.7
由于第一部分是true
,因此它将是有效的
true < 0.7
当转换为数字时,将尝试将两个边转换为数字,true
为1
,表达式变为
1 < 0.7
这是不正确的。这就是返回false
的原因。
同样,在第二种情况下,
1.5 < 1.6
是true
,因此它变为1
,表达式变为
1 < 1.7
是true
。
您可以将布尔值的行为检查为数字,例如
console.log(+true);
// 1
console.log(+false);
// 0
console.log(Number(true));
// 1
console.log(Number(false));
// 0
答案 1 :(得分:1)
0.5 < 0.6 // true
true变为1,因为类型更改为数字
1 < 0.7 // false
第二个:
1.5 < 1.6 // true
由于类型改变,true变为1
1 < 1.7 // true
答案 2 :(得分:0)
<
的关联性是从左到右。布尔值true
的数值为1,false
的值为0。
把它们放在一起:
0.5 < 0.6 < 0.7
(0.5 < 0.6) < 0.7
1 < 0.7
为false
。
1.5 < 1.6 < 1.7
(1.5 < 1.6) < 1.7
0 < 1.7
为true
。
括号使关联性清晰。