JavaScript中的数组如何工作?(即没有起始尺寸)

And*_*ech 7 javascript arrays

那天晚上我正在阅读关于阵列内部运作的这篇文章,并从所​​发布的答案中学到了很多,尤其是乔纳森·霍兰德的答案.

因此,事先给出数组大小的原因是需要事先保留空间,以便数组中的元素将在内存中彼此相邻放置,从而提供O(1)访问时间,因为pointer + offset遍历.


但是在JavaScript中,你可以像这样初始化一个数组:

var anArray = []; //Initialize an empty array, without a dimension
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,因为在JavaScript中你可以初始化一个数组而不预先指定一个维度,为数组分配的内存如何仍然提供O(1)访问时间,因为事先没有指定内存位置的"数量"?

Kim*_*bel 2

JavaScript 中的数组是“假的”。它们被实现为哈希映射。所以在最坏的情况下它们的访问时间不是 O(1)。它们还需要更多内存,并且您可以使用任何字符串作为数组索引。你觉得这很奇怪吗?这是。