我在JavaScript中编写了大量的年度数据,我正在考虑将它添加到数组中,使用year作为数组索引并将数据放入数组中.但是,Firebug似乎表明JavaScript通过用"undefined"填充数组中的两千多个条目来处理这个问题.有数百个这样的阵列在活动内存中徘徊,我担心成千上万无用数组项的开销可能会使程序开始变慢.会吗?
当您将数字索引的值设置为高于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
总之,数组意味着包含从零开始的顺序索引,如果您的属性不满足这些要求,则应该只使用一个对象.