2011-03-17 64 views
4

任何人都可以解釋爲什麼第二個警報說0嗎?JavaScript數組長度方法

var pollData = new Array(); 
    pollData['pollType'] = 2; 
    alert(pollData['pollType']); // This prints 2 
    alert(pollData.length); // This prints 0 ?? 
+0

那個狗屎。不要這樣做陣列ü讓我的大腦受傷 –

回答

8

只有添加數字索引時,數組的長度纔會更改。例如,

pollData["randomString"] = 23; 

對長度沒有影響,但

var pollData = []; 
pollData["45"] = "Hello"; 
pollData.length; // 46 

改變長度46注,這並不重要,如果該鍵是一個數字或字符串,只要它是一個數字整數。另外,你不應該這樣使用數組。考慮它更多的副作用,因爲數組也是對象,並且在JavaScript中,任何對象都可以將任意鍵保存爲字符串。

+0

我可以把密鑰作爲字符串'pollType'嗎? – edwinNosh

+0

是的,你可以。你問題中的例子就是這樣。但這不是一個好習慣。你想存儲與數組有關的附加數據嗎? – Anurag

+0

是的,但不會將它們添加到數組中,因爲長度仍然爲0 – edwinNosh

2

因爲您還沒有將任何東西放入數組中。您只分配給陣列對象上動態創建的pollType屬性。

如果使用數字索引,則數組自動處理長度。例如:

var arr = [ ]; // same as new Array() 
arr[2] = 'Banana!'; 
alert(arr.length); // prints 3 (indexes 0 through 2 were created) 
0

length屬性僅考慮所述陣列名稱是索引的那些成員(例如'1''2''3',...)。

0

JavaScript中的數組只有數字索引。

使用一個對象,這基本上就是你在做什麼,在該數組對象上設置屬性。

0

array.length返回數組中存儲了多少個值。第一個警報返回位置'pollType'的值。

的參考指南需要幫助的JavaScript陣列時,我一直用的是這個頁面http://www.hunlock.com/blogs/Mastering_Javascript_Arrays

我還念出來的標題下的Javascript不支持關聯數組,你可能會遇到這個問題,也。

+0

只是想要說明的是,儘管這就是Array.length應該做的事情,但它並不是那樣。這裏:http://jsfiddle.net/6WrkT/1/ –

0

var pollData = Array();

function test() { 
    pollData[0] = 2 
    alert(pollData[0]); 
    alert(pollData.length); 
} 

// [x]是數組位置;因此['polltype']正在導致問題