2016-01-08 37 views
-1

在检查铬控制台时,运行以下语句会返回奇怪的结果。当链接数学比较运算符时出现javascript的奇怪行为

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 

路两侧将试图将转换为数字,并且自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
0.5 < 0.6 // true 

真变为1,这是因为类型改变与数

1 < 0.7 // false 

第二个的:

1.5 < 1.6 // true 

真变成1,因为类型改变

1 < 1.7 // true 
0

关联的<从左至右。并且布尔型true的数值为1,并且false的值为0。

把这个在一起:

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

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

其中圆括号使关联性清楚。