【发布时间】:2017-06-06 22:52:48
【问题描述】:
这里我有一个数组,其中的元素的索引以 1 为增量分隔。
let noGap = [];
noGap[0] = 0;
noGap[1] = 1;
这里我有一个不同的数组,其索引由远大于 1 的索引分隔。
let gap = [];
gap[0] = 0;
gap[1000] = 1;
每个变量(noGap vs gap)使用多少内存有什么区别?我可以从 Chrome 控制台日志中看到 gap 的长度更大,因为它记录了 (1001) [0, undefined × 999, 1]。
但是如果gap 变量确实使用了更多空间,我很想知道它是否与数组中存在的undefined 的数量成比例,或者它是否是常数。
如果这是重复的问题,请原谅我。这是我找到的closest answer,但我无法完全理解答案。
【问题讨论】:
-
"...因为那里有 999 个'未定义'"。不,没有。有两个成员,长度为 1001。
-
真的取决于JS引擎和这段代码运行的次数——见热点优化/优化编译器。第二个带孔的数组可能会由具有一定开销的哈希表支持,而第一个将存储为紧凑的 32 位有符号整数数组。两者都执行预分配。
-
Internet Exploder 显示
0然后 999 个实际undefined值然后1- firefox 显示0, 999 empty slots, 1,chrome 显示0, 999 x undefined, 1(这是 chrome 显示空插槽的方式吗?) - 所以。 ..你指的是哪个浏览器 -
谢谢大家。我用铬。为了清楚起见,编辑了我的帖子。还要感谢@TommyMay,我知道我可能错过了之前的某个帖子。
标签: javascript arrays memory undefined