我从几页中读到的关于密集数组的解释似乎彼此矛盾。我想要一些帮助来了解它是什么。

尽管某些链接(search result 1search 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后跟undefined100000000位置。而是说第100000000个是100000000,没有空间分配给前100000000个元素。

    (实际上,尝试使用2而不是100000000进行此操作,您会发现一个奇怪的事情:Chrome将密集数组显示为[undefined, undefined, 2],而稀疏数组显示为[undefined × 2, 2]。)

    关于javascript - 密集阵列到底是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39030196/

    10-09 22:33