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的回答,这应该是最重要的答案,非常有用。谢谢火箭