【发布时间】:2012-04-13 18:07:11
【问题描述】:
我有一种情况,我可能设置了一个高索引的数组单元格,而没有设置它之前的任何单元格。
>>> var arr = [];
undefined
>>> arr[5] = 'value';
"filled"
>>> arr
[undefined, undefined, undefined, undefined, undefined, "filled"]
这样的数组是如何存储在内存中的?是否为每个未定义的值分配了空间?
在我的实际项目中,我可能会使用非常大的索引。例如,我可以设置单元格 500-800 和 900-1000。我不能使用哈希,因为我需要遍历这些非空单元格并注意它们的索引。我想知道像这样分割数组是否会为空单元格占用大量内存。
【问题讨论】:
-
我不确定我是否关注,你为什么不能使用
{}?您仍然可以使用for (i in obj)循环遍历所有属性。 -
为什么不能使用哈希表?如果您知道最大索引,您仍然可以使用
for循环。要么元素在哈希表中,你检索并处理它,或者它不在,你继续下一个循环迭代。 -
如果为每个值分配空间,那么
var foo=[]; foo[999999999] = "uh oh";将导致大量内存分配。它没有,所以它不是。
标签: javascript memory