似乎有一种传统观点认为数组表示为从v8中的索引到值的哈希映射。我发现状态的唯一来源是:
https://www.youtube.com/watch?feature=player_detailpage&v=XAqIpGU8ZZk#t=994s
似乎权威,然而,它可以追溯到2012年。自那以后可能已经发生了很多变化。
是否仍然如此
var a1 = Array(1000)
是一个连续的数组(除非你超出数组的边界)并且var a2 = []
不是?
答案 0 :(得分:1)
如果可以,V8将使用真正的数组。例如,如果以连续的方式填充数组,请不要在其上使用delete
等。基本上,如果您使用它就好像它是一个真正的数组(但是为您神奇地增长的数组), V8很可能能够继续使用真正的阵列。
如果您的数据适合typed arrays之一(Int8Array
,Uint8Array
,Uint8ClampedArray
,Int16Array
,Uint16Array
,{ {1}},Int32Array
,Uint32Array
或Float32Array
),您可以使用它们确保您正在处理真正的数组。
重新提出您在问题中添加的评论:我没有具体的参考资料,我可以引用上述内容。当然,V8源代码可以在the V8 site上获得,但是对于所有可能回退到字典行为的地方来说,挖掘它可能比你(或我)想要做的更多。 : - )