JavaScript是否填充空数组项?
我正在用JavaScript编写大量年度数据,并考虑将其添加到数组中,使用年度作为数组索引,并将数据放入数组中。然而,Firebug似乎表明JavaScript通过在数组中填充两千多个“未定义”项来处理这个问题。由于活动内存中有数百个这样的数组,我担心数十万个无用数组项的开销可能会开始降低程序的速度。会吗?是的,很有可能。您应该考虑使用JavaScript对象来代替:JavaScript是否填充空数组项?,javascript,arrays,memory-management,Javascript,Arrays,Memory Management,我正在用JavaScript编写大量年度数据,并考虑将其添加到数组中,使用年度作为数组索引,并将数据放入数组中。然而,Firebug似乎表明JavaScript通过在数组中填充两千多个“未定义”项来处理这个问题。由于活动内存中有数百个这样的数组,我担心数十万个无用数组项的开销可能会开始降低程序的速度。会吗?是的,很有可能。您应该考虑使用JavaScript对象来代替: var years = {2009: 'Good', 2010: 'Better'}; 如果将数值索引的值设置为高于数组的当前
var years = {2009: 'Good', 2010: 'Better'};
如果将数值索引的值设置为高于数组的当前
length
,则length
属性将受到影响
简而言之,您应该使用对象
:
var data = {};
data[year] = "some data";
// or
var data = {
2009: "2009 data",
2010: "2010 data"
};
现在我回答题为“JavaScript是否填充空数组项?”的问题
不,正如我前面所说,只有length
属性被更改,(如果需要,只有当添加的索引大于当前的length
),length
增加到比该索引的数值多一个
这些方法的工作假设数组对象的索引从零开始
前面的索引在数组中并不存在,您可以测试它:
var array = [];
array[10] = undefined;
array.hasOwnProperty(10); // true
array.hasOwnProperty(9); // false
总之,数组应该包含顺序索引,从零开始,如果您的属性不满足这些要求,您应该只使用一个对象。好吧,如果您迭代数千个未定义的对象,它将影响总体程序速度,但不确定您是否会注意到。另一方面,有时稀疏数组比自定义对象更易于使用,
而数组也有这样方便的方法
在日历应用程序中,我从使用中的每年的对象开始,但每年由十二个成员(月数组)组成,每个“月”是一个稀疏的有效日期数组,其长度取决于该月有任何数据的最高日期 没关系,因为钥匙是等价的。这只是一个品味的问题。你可能会:1024个空节点在FF 3.5.6中需要大约2ms的时间-这确实有助于澄清阵列的工作原理。我已切换到对象文字。相关问题: