为什么语句“ 0 <0.5 <1”会减少为false?

时间:2018-11-07 18:08:48

标签: javascript boolean

我最近发现了ECMAScript Spec,可以用来回答一段时间以来关于Math.random()的问题;即是否会在没有0的帮助下生成Math.floor()

ECMAScript规范将0 <= Math.random() < 1指定为false,而不是出于某种原因而与其他任何人不同。我跳到控制台并进行了测试,然后再将其保存在笔记中,但注意到该语句减少为0 <= Math.random() < 1

下面是一个函数,该函数测试有关我认为可能导致此谎言的比较语句的所有内容。我两次调用该函数以生成两个布尔值数组,并且结果似乎暗示该字面意义为:FALSE-仅此条语句返回TRUE,而应返回true 。尤其是当您考虑奖金回合时,在这里我测试完全相同的语句,但最后附加了一个比较,它还会返回function getTruths( a, b, c ) { return [ a + 1 < b + 1, a + 1 < c + 1, b + 1 < c + 1, a + 1 < b + 1 < c + 1, a + 0 < b + 0, a + 0 < c + 0, b + 0 < c + 0, a + 0 < b + 0 < c + 0 ]; } function demonstrate() { // array of truth console.log( getTruths( 0, 1, 2 ) ); // array of lies console.log( getTruths( 0, 0.5, 1 ) ); // bonus round return [ 0 < 0.5 < 1 < 1.5 ]; } demonstrate();

a

因此,我做了更多的尝试,并了解到不仅如此。看来bb实际上可以是任何小于1且等于或大于零的值,只要a仍大于c,并且1当然仍然等于FALSE ...并且给定这些参数,无论如何,返回值仍为1。如果您突然将import cucumber.org.junit.runner.RunWith; import cucumber.api.junit.CucumberOptions; CucumberOptions cannot be resolved to a type RunWith cannot be resolved to a type 添加到所有内容中,那么您又会恢复正常,就像上面提供的功能一样。

无论如何,有人可以向我解释吗?谢谢。

1 个答案:

答案 0 :(得分:4)

a < b < c

被解释为

(a < b) < c

诸如<之类的关系运算符的结果值是一个布尔值,为true或false。如果c是一个数字,则该布尔值将转换为1({true)或0(false)一个数字。因此,将c与0或1进行比较,而不是ab的值。

写“严格地在ba之间的c是正确的方式

a < b && b < c