我说的是繁重的编码,例如速度昂贵的图形或物理处理(非标准)。
var a=[0,1,2,3,4,5,6,7,8,9];
当你问的时候会发生什么
console.log(a.lengh);
它是否像访问一个随变化而更新的普通变量一样,还是真的每次都计算在内?
假设你有很多依赖于了解这一点的循环
var i=flepdefloo; // some large number;
var a2=[];
while(i--){
a2[a2.length] = 'something';
}
a2.length 是否应该在单独的 var 中手动缓存/递增?
.length
的值是在数组发生变化时计算的,而不是在访问数组时计算的。至少according to the specification .
事实上,当我在 Chrome 中检查该属性时,它是一个普通的数据属性(不是 getter 或 setter):
> Object.getOwnPropertyDescriptor([], 'length');
Object {value: 0, writable: true, enumerable: false, configurable: false}
但是,还有其他方法可以将元素添加到数组中。您可以使用 .push
:
arr.push(value);
您还可以使用特定长度初始化数组并使用循环变量设置值(这需要您更改循环):
var arr = new Array(length);
// ...
arr[i] = value;