2016-11-07 112 views
0

我在理解一個簡單的概念時遇到了問題。代碼如下:我無法理解一段代碼

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,因爲他生成011不包括)之間的值,所以不應該Math.floor(Math.random()*arr.length)總是返回8在我的情況?

這是我目前不明白的地方,在這個問題上找不到任何東西。

謝謝。

+0

Math.Floor項目返回插入數字的較低值,Math.random給出一個介於0和1之間的數字,因此它將始終降爲0. –

+1

您知道'Math.random'的作用嗎?你知道'Math.floor'的作用嗎?從那裏開始,找出你不明白的行爲,(如有必要)提出更具體的問題。 – meagar

+2

do'var a = Math.random(); console.log(a,a * 8,Math.floor(a * 8));'也許它變得更加清晰。 – JJJ

回答

6

Math.floor()返回小於或等於給定數字的最大整數。換句話說,它將數字向下舍入到最接近的整數。

在你的代碼Math.random()*arr.length可以返回一個實數Math.random可能返回1.3和數組長度爲8位,所以不是隨機數組元素是2.4,你會得到2,這使得如果你想要的方式更有意義能夠選擇數組元素的索引。如果Math.random()返回.5,那麼你會得到一個整數,但可能性是你在大多數情況下不會得到一個整數。

打破Math.floor(Math.random()*arr.length)向下:

  • arr.length是8
  • Math.random()從0直到但不包括1
  • Math.floor輪的8倍Math.floor向下
  • 實施例使用所述結果返回一個值.3作爲從Math.random()返回的值:
    Math.floor(.3 * 8)
    Math.floor(2.4)
    2

因此給予代碼Math.floor(Math.random()*arr.length)你會從零的整數結束了七個,其中的任何一個然後可以使用您的arr陣列選擇像arr[randomArr].