JavaScript如何创建稀疏数组?

时间:2018-09-05 18:02:20

标签: javascript arrays

我不知道此功能的名称:

a = []
a[57] = "test";

console.log(a.length)
console.log(a[57])
console.log(a)

我对此表示敬畏。来自C背景,此行为与诸如分配内存之类的行为有很大不同。有几个问题:

  1. JavaScript是否为数组中的前57个“空”条目分配内存?
  2. 如果不是,那么Javascript如何使用碎片化的内存地址来保留O(1)以便进行查找?
  3. JavaScript数组是真的数组还是只是以整数作为键的对象?
  4. 这个设计模式叫什么以便我可以进一步研究它?

1 个答案:

答案 0 :(得分:0)

  
      
  1. JavaScript是否为数组中的前57个“空”条目分配内存?
  2.   

1。

JS数组可能 密集 ,取决于引擎,构造方式以及之后的使用方式。

只要在定义所有元素且没有孔的情况下构建数组,流行引擎就会创建密集数组。

密集数组定义:

[0,1,2,3,4];

Array.apply(null, Array(4)); // This is creating an Array expanding the internal Sparse Array as it initial values.

稀疏数组定义:

[0,,2,3,4];

new Array();

new Array(4);
  
      
  1. 如果不是,那么Javascript如何使用碎片化的内存地址来保留O(1)以便进行查找?
  2.   

2。取决于阵列

对于密集数组,它将所有内容存储在同一块内存中。

对于 sparse 数组,它将创建一个哈希表,并分别存储指向每个元素的指针。

  
      
  1. JavaScript数组是真的数组还是只是以整数作为键的对象?
  2.   

3。。它们是Object

的一种

数组是常规对象,具有一些使它们按预期运行的属性。

使用诸如1之类的整数键(或代表诸如"1"之类的整数的字符串)访问元素将检索该键下存储的任何内容。使用非整数(也不使用整数的字符串表示形式)仍将设置/获取对象属性。

数组length只是对象的一个​​属性,其值不受修改对象属性的影响。

  
      
  1. 这个设计模式叫什么以便我可以进一步研究它?
  2.   

4。不确定