我最近发现了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
因此,我做了更多的尝试,并了解到不仅如此。看来b
和b
实际上可以是任何小于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
添加到所有内容中,那么您又会恢复正常,就像上面提供的功能一样。
无论如何,有人可以向我解释吗?谢谢。
答案 0 :(得分:4)
a < b < c
被解释为
(a < b) < c
诸如<
之类的关系运算符的结果值是一个布尔值,为true或false。如果c
是一个数字,则该布尔值将转换为1({true
)或0(false
)一个数字。因此,将c
与0或1进行比较,而不是a
或b
的值。
写“严格地在b
和a
之间的c
是正确的方式
a < b && b < c