链接数学比较运算符时javascript的奇怪行为

时间:2016-01-08 10:32:56

标签: javascript

在检查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));

3 个答案:

答案 0 :(得分:7)

表达式

0.5 < 0.6 < 0.7
像这样评估

(0.5 < 0.6) < 0.7

由于第一部分是true,因此它将是有效的

true < 0.7

当转换为数字时,将尝试将两个边转换为数字,true1,表达式变为

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。

把它们放在一起:

  1. 0.5 < 0.6 < 0.7 (0.5 < 0.6) < 0.7 1 < 0.7false

  2. 1.5 < 1.6 < 1.7 (1.5 < 1.6) < 1.7 0 < 1.7true

  3. 括号使关联性清晰。