【发布时间】:2014-10-26 13:25:25
【问题描述】:
检查一些代码,我发现了以下随机整数生成器函数:
function randomInt(min, max) {
return min ? min : min = 0,
max ? max : max = 1,
0 | Math.random() * (max - min + 1) + min
}
与MDN的等效函数比较:
// Returns a random integer between min (included) and max (excluded)
// Using Math.round() will give you a non-uniform distribution!
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
我知道第一个创建和包含 max 的整数,并且它检查值或将它们分配默认为 min 和 max 但我不明白它如何返回整数而不是浮点数没有Math.floor() 方法。
是使用0 | Math.random() * (max - min + 1) + min 表达式实现的吗?如果有,怎么做?
【问题讨论】:
-
是否它只返回整数?
-
天哪,多么糟糕的代码。作为条件操作数的赋值。 *抱住鼻子*
-
@caruso_g:事实上,
((Math.random() * (max - min)) | 0) + min将是randomInt的相当标准版本,尽管在现代引擎上它是 a bit slower。 -
@caruso_g:没有添加,没有。
4.3 | 4只是4,例如,不是8。如果任一操作数位为1,则单个位的或运算结果为1,否则为0:0 | 0=>0,0 | 1=>1,1 | 0= >1,1 | 1=>1。按位或运算符将其两个操作数转换为 32 位整数,然后对这 32 位中的每一个都执行此操作。在这种情况下,它将左操作数转换为整数,该整数将设置各种位;转换完全没有位设置的右操作数 (0);然后执行 OR,这意味着我们最终只得到左操作数的(下限)值。 -
@T.J.Crowder 啊哈,明白了。非常感谢您的帮助。
标签: javascript random