在检查铬控制台时,运行以下语句会返回奇怪的结果。当链接数学比较运算符时出现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));
在检查铬控制台时,运行以下语句会返回奇怪的结果。当链接数学比较运算符时出现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.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
0.5 < 0.6 // true
真变为1,这是因为类型改变与数
1 < 0.7 // false
第二个的:
1.5 < 1.6 // true
真变成1,因为类型改变
1 < 1.7 // true
的关联的<
从左至右。并且布尔型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
。
其中圆括号使关联性清楚。
我不喜欢这些问题。已经有一百万人了,有人插手一个控制台,然后感到惊讶。有一个无限可能的组合,你可以运行到控制台并询问有关它的问题。 –