2015-04-30 53 views
3

大家好!我已經完成了幾個JavaScript的簡短課程,現在我已經轉向Heads Up:JavaScript,這已經很有趣並且有助於鞏固我的學習。雖然我遇到了一些我不明白的東西。在下面的一段代碼中,我明白程序在執行時通常會做些什麼,但在試圖追蹤執行的每一步時,我意識到我被某個特定段的「什麼/爲什麼/如何」所困惑。下面是示例程序,我看代碼:此示例的JavaScript代碼說明?


function makePhrases() { 

      var words1 = ["24/7", "multi-tier", "30,000 foot", "B-to-B", "win-win"]; 

      var words2 = ["empowered", "value-added", "oriented", "focused", "aligned"]; 

      var words3 = ["process", "solution", "tipping-point", "strategy", "vision"]; 



      var rand1 = Math.floor(Math.random() * words1.length); 

      var rand2 = Math.floor(Math.random() * words2.length); 

      var rand3 = Math.floor(Math.random() * words3.length); 



      var phrase = words1[rand1] + " " + words2[rand2] + " " + words3[rand3]; 

      alert(phrase); 

     } 

     makePhrases(); 

這是一個已經被混淆爲我段:

  var rand1 = Math.floor(Math.random() * words1.length); 

      var rand2 = Math.floor(Math.random() * words2.length); 

      var rand3 = Math.floor(Math.random() * words3.length); 

我得到它的一部分的代碼隨機選擇每個數組中的哪個項目以形成新的「隨機短語」,但我不明白它是如何實現的。之前我還不知道Math.random或Math.floor可以應用於字符串(必須是因爲它們在數組中,實質上是一個數字?),或者使用Math.random的方式或原因帶字符串的Math.floor。

此外,爲什麼我們需要使用.length這個化身?它有什麼作用?我非常感謝你的智慧,並花時間幫助那些剛剛接觸編碼的人,並且還有很多東西需要學習!

+1

@ David W,Halcyon,Matt Burland&Tom Sarduy ---謝謝!這使得現在更有意義,這些解釋真的有幫助。我想我的最後一個問題是,當我們在words1中創建索引時,這是告訴腳本有多少項可以從數組中選擇,基本上設置了它可以選擇的數字的上限,這是然後與數組中的特定插槽關聯(一旦我們將其舍入爲整數)? –

回答

3

讓我們看一下代碼:

var rand1 = Math.floor(Math.random() * words1.length); 

Math.random()返回00.999999..之間的數字。

words1是可供選擇的單詞列表。

words1.length是列表的大小,在這種情況下,項目數5

Math.random() * words1.length返回04.99999..之間的數字。

最後使用Math.floor()得到04之間的整數。

這個數字被用作words1的索引,所以words1[rand1]


所以Math操作從未使用上的繩子,獲取只在最後一步的字符串。

2

發生的一切就是Math.random()被用作一個乘法器,用來反映相應數組中元素的數量('.length'屬性)來創建一個索引值。它不適用於字符串;只是作爲表達式的一部分來確定一個字符串數組的索引。

0

你想從數組中選擇一個隨機元素。所以你需要一個索引,換句話說,一個從04的隨機數(因爲你的長度是5)。 Math.random會給你一個01(不包括1)之間的隨機數。因此,要將其轉換爲0到4之間的隨機數,您需要按照5的長度倍增。

然後,由於我們需要一個整數,而不是一個浮點數,我們使用Math.floor截斷它爲一個整數。

0
Math.random() //Return a random number between 0-1 
words1.length() //Return the length of the array 
Math.floor()  //Return the closest integer less than or equal to a given number. 

現在表達式:

(Math.random() * words1.length) 

將返回0之間以及陣列的長度的隨機數。可以是浮子,像3,4-例如:

Math.floor(Math.random() * words1.length) 

將返回0之間和字符串的長度的整數,所以現在可以使用它作爲字符串(表現得像一個數組)索引。

注:注意,隨機數是介於0(含)和1(不含),這就是爲什麼是安全使用Math.floor(),以避免例外,這就是爲什麼不使用Math.ceiling