JavaScript是否填充空数组项?

fut*_*ime 9 javascript arrays memory-management

我在JavaScript中编写了大量的年度数据,我正在考虑将它添加到数组中,使用year作为数组索引并将数据放入数组中.但是,Firebug似乎表明JavaScript通过用"undefined"填充数组中的两千多个条目来处理这个问题.有数百个这样的阵列在活动内存中徘徊,我担心成千上万无用数组项的开销可能会使程序开始变慢.会吗?

CMS*_*CMS 11

当您将数字索引的值设置为高于length数组的当前值时,该length属性会受到影响.

简而言之,您应该使用Object:

var data = {};
data[year] = "some data";

// or
var data = {
  2009: "2009 data",
  2010: "2010 data"
};
Run Code Online (Sandbox Code Playgroud)

现在我回答问题标题:" JavaScript是否填充空数组项? "

不,正如我之前所说,只有length属性被更改,(如果需要,只有当添加的索引大于当前值时length),length才会增加到比该索引的数值多一个.

这些Array.prototype方法的工作原理是假设数组对象的索引从零开始.

以前的索引实际上并不存在于Array对象中,您可以对其进行测试:

var array = [];
array[10] = undefined;

array.hasOwnProperty(10); // true
array.hasOwnProperty(9);  // false
Run Code Online (Sandbox Code Playgroud)

总之,数组意味着包含从零开始的顺序索引,如果您的属性不满足这些要求,则应该只使用一个对象.