我正在使用JavaScript编写大量年度数据,我正在考虑将其添加到数组中,使用year作为数组索引并将数据放入数组中。但是,Firebug似乎表明JavaScript通过用“undefined”填充数组中的两千多个条目来处理这个问题。有数百个这样的阵列在活动内存中徘徊,我担心数十万个无用数组项的开销可能会使程序开始变慢。会吗?
答案 0 :(得分:11)
如果将数字索引的值设置为高于数组的当前length
,则length
属性会受到影响。
简而言之,您应该使用Object
:
var data = {};
data[year] = "some data";
// or
var data = {
2009: "2009 data",
2010: "2010 data"
};
现在我回答问题标题:“ JavaScript是否填充空数组项?”
不,正如我之前所说,只更改了length
属性(如果必要,仅当添加的索引大于当前length
时),length
会增加到比该索引的数值多一个。
Array.prototype
方法的工作原理是假设数组对象的索引从零开始。
以前的索引在Array
对象中并不存在,您可以对其进行测试:
var array = [];
array[10] = undefined;
array.hasOwnProperty(10); // true
array.hasOwnProperty(9); // false
总之,数组意味着包含从零开始的顺序索引,如果您的属性不满足这些要求,则应该只使用一个对象。
答案 1 :(得分:4)
是的,很有可能。您应该考虑使用JavaScript对象:
var years = {2009: 'Good', 2010: 'Better'};
答案 2 :(得分:0)
好吧,如果你迭代了数千个未定义的,它会影响整体程序速度,但不确定你是否会注意到它。
答案 3 :(得分:0)
另一方面,有时稀疏数组比自定义对象更容易使用, 和数组有这么方便的方法。
在日历应用程序中,我从每年使用的对象开始,但每年由12个成员(月数组)组成,每个'月'是一个稀疏的重要日期数组,其长度取决于最高日期那个月有任何数据。