也就是说,如果我使用当前时间作为数组的索引:
array[Date.getTime()] = value;
Run Code Online (Sandbox Code Playgroud)
解释器会实例化从0到现在的所有元素吗?不同的浏览器有不同的做法吗?
我记得曾经是AIX内核中的一个错误,它会根据请求创建伪ttys,但如果你这样做,比如"echo>/dev/pty10000000000"它会创建/ dev/pty0,/ dev/pty1, ......然后摔倒了.在贸易展览会上很有趣,但我不希望这发生在我的客户身上.
可能重复:
Javascript数组是否稀疏?
我正在学习JavaScript,并且已经阅读了一些简单的介绍和教程.在查看Array对象时,我偶然发现了一些细节,这些细节让我非常奇怪,来自其他语言,如C/Java/Scala/......
所以我们假设我们定义一个数组:
var arr = ['foo','bar','qux']
Run Code Online (Sandbox Code Playgroud)
我们现在分配
arr[5] = 'baz'
Run Code Online (Sandbox Code Playgroud)
这导致我们的数组看起来像这样:
arr
>> ["foo", "bar", "qux", undefined, undefined, "baz"]
Run Code Online (Sandbox Code Playgroud)
长度如预期
arr.length
>> 6
Run Code Online (Sandbox Code Playgroud)
JavaScript已经将我们的数组扩展到所需的长度 - 六 - 并且新项目被设置为undefined - 除了我们实际赋值的那个.
从低级别的角度来看,这是一种可怕的记忆.通常,数组在内存中是连续的范围 - 使数组更大通常涉及将整个数组复制到足够大小的新内存位置.这是一项非常昂贵的操作.
现在,我确实意识到这可能不是 JavaScript引擎正在做的事情,因为复制数组会非常昂贵,并且内存空间将被浪费在所有这些"未定义"的值上.
有人能告诉我门后究竟发生了什么吗?