我无法理解一段代码

时间:2016-11-07 15:11:22

标签: javascript math random

我在理解一个简单的概念时遇到了问题。代码下方:

var arr = [1, 3, 7, 9, 12, 5, 4, 6];
var randomArr = Math.floor(Math.random()*arr.length);
console.clear();
console.log(randomArr);

我不明白这一点,为什么Math.floor(Math.random()*arr.length)每次Math.floor(Math.random())总是返回0时会返回一个随机数?根据我的理解,Math.floor(Math.random())将始终返回0,因为他生成了01之间的值(1未包括在内),所以不应该{0}} Math.floor(Math.random()*arr.length)总是在我的情况下返回8

这是我目前无法理解的,在此事上无法找到任何内容。

感谢。

1 个答案:

答案 0 :(得分:6)

Math.floor()返回小于或等于给定数字的最大整数。换句话说,它将数字向下舍入到最接近的整数。

在你的代码Math.random()*arr.length中可能会返回一个实数,因为Math.random可能返回.3且数组长度为8,所以代替随机数组元素为2.4,你得到2 ,如果你想能够选择数组元素的索引,这会更有意义。如果Math.random()返回.5,那么您将得到一个整数,但可能性是在大多数情况下您不会得到整数。

打破Math.floor(Math.random()*arr.length)

  • arr.length是8
  • Math.random()返回0到1但不包括1的值。
  • Math.floor将结果8次Math.floor向下舍入
  • 使用.3作为Math.random()返回的值的示例:Math.floor( .3 * 8)
    Math.floor(2.4)
    2

因此,给定代码Math.floor(Math.random()*arr.length),您最终会得到一个从0到7的整数,然后可以使用其中的任何一个来选择arr数组中的项目,例如{{1 }}