2011-03-17 42 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']正在导致问题