2011-06-22 25 views
3

我想了解JavaScript數組是什麼,因爲傳統的編程語言將數組定義爲可使用偏移量進行尋址的連續存儲區域。什麼是JavaScript數組?

myObj.myProperty = "my Value"; 

myObj["myProperty"] = "my Value"; 

所以,JavaScript數組是簡單地使用數字而不是在它的名字的尋址:

myObj[0] = "my Value"; 
myObj.length // === 1 

現在,一個普通的JavaScript對象可以作爲解決

JavaScript Array也有方法,如slice()和join()。

問:我說的到目前爲止是真的嗎?

+3

@ harper89:http://w3fools.com/ – Neal

+1

稍微修正一點:「一個JavaScript數組僅僅使用數字而不是名稱來尋址」 - 它實際上仍在使用字符串。當你鍵入'myObj [0]'時,它會被轉換爲'myObj ['0']' –

回答

5

JavaScript陣列與陣列功能的哈希對象使用Array.prototype附接。簡單地說,這是JavaScript的一個「陣列」:

var x = { 
    length : 3, 
    '0' : 'first', 
    '1' : 'second', 
    '2' : 'third' 
}; 
x.__proto__ = Array.prototype; 

所有的陣列功能,只作用於指標,如你所期望的,但你也可以做任何事情數組對象,你會做一個一般JS對象:

ary.foo = 'bar'; 
+1

,但是你**不能**執行'x.0' – Neal

+0

@Neal - 只是因爲它是JS中的語法錯誤。 x ['0']可以正常工作 –

+0

@cwolves,是的,我知道這一點,但你說過你的車與一個你不能做的普通物體做同樣的操作。 – Neal

0

Javascript對象是關聯數組。 Javascript有一個名爲Array的Object,它有處理數據的特殊方法。

+0

-1:給JS的新手很糟糕的措辭。JS數組不是關聯數組。當用作數組時,它們作爲普通的索引數組。當用作對象時,它們是關聯的。有許多爭論將它們用作對象。 –

1

很好看(讓我在開始往那個) Mastering Javascript Arrays

+0

謝謝Ates!我今晚晚些時候再看! –

+0

哈哈,你的感覺「感謝Dementic」:D他只是修理了我的一個拼寫錯誤。 XD – Dementic

1

任何JavaScript數組是一個對象,可以使用不同的對象*鑰匙,使它的哈希值。

*與字符串不同的所有對象都將轉換爲字符串[object Object],因此它們將充當相同的密鑰! (感謝cwolves :)

+1

只有字符串可以是鍵 –

+0

@cwolves - 與null和undefined不同的任何「非字符串」值將被轉換爲字符串,因爲所有對象屬性名都是字符串! – cirne100

+0

是的,我意識到這一點,但說你可以使用「不同的對象作爲鍵」,這意味着這將按預期工作:'var x = {},y = {},z = {}; x [y] = 1; x [z] = 2;',但實際上你會得到'x == {'[object Object]':2}'。而FYI,'null'和'undefined'也可以工作:) –