Javascript math.floor和math.random问题

Javascript math.floor和math.random问题,javascript,Javascript,我的问题是,我已经运行了几次,有时会打印D,但我真的不明白为什么,因为据我所知 var letters = ["A", "B", "C", "D"]; var rnd = Math.random(); var rndK = letters[Math.floor(rnd*letters.length)]; return rndK; 不应该只在rnd给出1时才打印出来,但是既然math.floor()四舍五入,这就不可

我的问题是,我已经运行了几次,有时会打印D,但我真的不明白为什么,因为据我所知

var letters = ["A", "B", "C", "D"];
var rnd = Math.random();
var rndK = letters[Math.floor(rnd*letters.length)];
return rndK;
不应该只在rnd给出1时才打印出来,但是既然math.floor()四舍五入,这就不可能了?
我可能在这里遗漏了一些非常明显的东西,如果有人能为javascript的初学者解释一下的话,谢谢。

你说得对,
math.random()
只返回一个介于0和1之间的值。将其乘以
字母.length
,即4,它将只返回0到3之间的值,而不会返回4。有时仍然会返回D,因为D的索引是3。记住,元素的索引是元素的位置减去1。所以A的指数是0,B的指数是1,C的指数是2,D的指数是3。如果不希望返回D,请将
math.random()
乘以
letters.length-1
没错,
math.random()
只返回0到1之间的值。将其乘以
字母.length
,即4,它将只返回0到3之间的值,而不会返回4。有时仍然会返回D,因为D的索引是3。记住,元素的索引是元素的位置减去1。所以A的指数是0,B的指数是1,C的指数是2,D的指数是3。如果不希望返回D,请将
math.random()
乘以
letters.length-1

math.floor(rnd*letters.length)
在您的情况下,返回一个介于0和3之间的数字。因为
letters.length==4

字母[0]=“A”

字母[3]=“D”

所以一切都按预期进行:)

Math.floor(rnd*letters.length)
在您的情况下,返回一个介于0和3之间的数字。因为
letters.length==4

字母[0]=“A”

字母[3]=“D”


所以一切都按预期进行:)

D位于索引3,而不是4ahhh,好吧,这是因为javascript从0算起就是1?所以A=0,D=3?非常感谢你刚才提到的。JS中的数组是零索引的。
Math.random()*字母.length
的最大可能数为
3.96
0.99*4
)。这就是为什么你会看到
D
@CarlMarkham
Math.random()
可以返回大于0.99的数字(只要它们小于1)。D位于索引3而不是4ahhh,好吧,这是因为javascript本质上从0算起就是1?所以A=0,D=3?非常感谢你刚才提到的。JS中的数组是零索引的。
Math.random()*字母.length
的最大可能数为
3.96
0.99*4
)。这就是为什么你会看到
D
@CarlMarkham
Math.random()
可以返回大于0.99的数字(只要它们小于1)。非常感谢:)非常感谢:)啊,非常感谢:)啊,非常感谢:)啊,非常感谢:)
math.random() returns a pseudorandom number between 0 and 1 but not 1,
math.floor() returns the highest integer that's less or equal to the value, rounding down essentially.