2012-04-07 56 views
7

我正在閱讀Stackoverflow上的How can I get query string values in JavaScript?,這段代碼從第一個回覆中讓我想知道爲什麼'vars.push()'是這樣使用的?爲什麼使用array.push()來創建一個對象?

function getUrlVars() 
{ 
    var vars = [], hash; 
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); 
    for(var i = 0; i < hashes.length; i++) 
    { 
     hash = hashes[i].split('='); 
     vars.push(hash[0]); 
     vars[hash[0]] = hash[1]; 
    } 
    return vars; 
} 

這一點,但不是:

var vars=[]; 
... 
vars.push(hash[0]); 
vars[hash[0]] = hash[1]; 

我改寫了像代碼:

var vars={}; 
... 
vars[hash[0]] = hash[1]; 

和它的作品。現在的問題是:

  • 爲什麼有人會使用數組來處理那種回覆?
  • 以及爲什麼有人會使用ARR.push(KEY),然後使用ARR[KEY]=VAL格式?

回答

1

push()將其參數按順序追加到數組的末尾。它直接修改數組,而不是創建一個新的數組。 push()和它的伴隨方法pop()使用數組來提供先入先出堆棧的功能。

+2

任何有指針的語言都可以做OOP。所以沒有OOP語言,因爲OOP是一種編程技術,而不是語言範例。 C中沒有「對象」,但是你可以用C做OOP。javascript是一種程序語言。 Scheme或LISP不是例如。 – mpm 2012-04-07 09:10:20

2

這導致vars既是一個鍵和字典的數組。
我能想到的唯一好理由是將查詢參數的訂單保留在字典中,即not defined

無論哪種方式,我會注意這個功能可以去除重複的查詢參數 - 只保留最後一個值(雖然將鍵多次插入到數組)

1

壓棧會將密鑰作爲最後一個鍵。所以它允許你在數組中有一個邏輯順序。

2

函數使用數組作爲數組和對象。

作爲一個數組,它包含查詢字符串中的鍵。作爲對象,它包含從查詢字符串中的鍵命名的屬性,並且屬性具有查詢字符串中的值。

所以,米如果例如查詢字符串看起來像這樣:a=1&b=2,陣列包含兩個項目的「a」和「b」,並且它具有兩個屬性a與值1b與值2

相關問題