Javascript Math.random数组长度+;1.
我不理解代码中的某些内容:Javascript Math.random数组长度+;1.,javascript,arrays,math,random,Javascript,Arrays,Math,Random,我不理解代码中的某些内容: vars.randAnim = anims[Math.floor(Math.random()*(anims.length + 1))]; 假设我们有一个新的数组,包含5个元素,从索引0到索引4 然后让我们假设Math.random()返回1。因此,我们得到了1*5,但是我的数组中不存在5索引,加上这里我们添加了一个“+1” 为什么是+1?我本以为“-1”正好相反。random不返回1,它返回0到1之间的值Math.floor基本上会截断数值的小数点 因此,如果Mat
vars.randAnim = anims[Math.floor(Math.random()*(anims.length + 1))];
假设我们有一个新的数组
,包含5个元素,从索引0到索引4
然后让我们假设Math.random()
返回1。因此,我们得到了1*5
,但是我的数组中不存在5索引,加上这里我们添加了一个“+1”
为什么是+1?我本以为“-1”正好相反。random不返回1,它返回0到1之间的值Math.floor
基本上会截断数值的小数点
因此,如果Math.random
返回0.3984753005206585
并将其乘以4
,我们得到1.593901202082634
,在Math.floor
之后变成1
当您想从数组中获取随机值时,将Math.random
乘以长度,这样它将返回介于0和长度之间的值(但绝不是长度)
上述代码中的anims.length+1
不正确。代码错误(如Rocket所述)。应该是
Math.floor(Math.random()*(anims.length))
但是推理也有一个缺陷:Math.random()不能返回“1”。有些重复:这里的+1
实际上是错误的。:-)假设Math.random()
返回.99,然后是.99*5=4.95,然后是4.95+1=5.95,然后是Math.floor
将返回超出数组边界的5。因此,问题是:为什么最后是+1
?正如火箭所说,code+1是错误的。但是推理也有一个缺陷:Math.random()不能返回“1”。@Rocket@leonbloy@sv_in@Kevin:谢谢,这真的正确吗?math.random永远不是“1”??我第一次听到这个消息时,非常感谢tipThis的回答,这应该是最重要的答案,非常有用。谢谢火箭