我从几页中读到的关于密集数组的解释似乎彼此矛盾。我想要一些帮助来了解它是什么。
尽管某些链接(search result 1,search result 2)表明它只是一个数组,其中:
这里的暗示是JavaScript数组很密集。
到这里为止一切都是有意义的。
但是从JavaScript Guide on the Mozilla Developer Network (MDN)摘录的这段话说:
现在,这使我感到困惑。我的问题是:
如果说不能保证JavaScript数组密集,则MDN页面上的语句意味着什么?如果它表示以下内容不是密集数组,因为其一个或多个元素在初始化时是
undefined
,那么为什么我上面列出的链接似乎表明JavaScript数组确实是密集的?var array = new Array(1, , 3, ); // [1, undefined, 3, undefined]
最佳答案
“密集”与“稀疏”相反,通常在谈论存储时使用。例如,此数组是密集的:
a = [undefined, undefined, 2]
它可以像这样完全存储在内存中:三个位置的序列,前两个是
undefined
,第三个是2
。该数组是稀疏的:
a = []
a[100000000] = 100000000
它不会以100000001个位置的顺序存储在内存中,因为效率极低。绝对不是
100000000
后跟undefined
的100000000
位置。而是说第100000000个是100000000
,没有空间分配给前100000000个元素。(实际上,尝试使用
2
而不是100000000
进行此操作,您会发现一个奇怪的事情:Chrome将密集数组显示为[undefined, undefined, 2]
,而稀疏数组显示为[undefined × 2, 2]
。)关于javascript - 密集阵列到底是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39030196/