我不知道此功能的名称:
a = []
a[57] = "test";
console.log(a.length)
console.log(a[57])
console.log(a)
我对此表示敬畏。来自C背景,此行为与诸如分配内存之类的行为有很大不同。有几个问题:
答案 0 :(得分:0)
- JavaScript是否为数组中的前57个“空”条目分配内存?
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);
- 如果不是,那么Javascript如何使用碎片化的内存地址来保留O(1)以便进行查找?
2。取决于阵列
对于密集数组,它将所有内容存储在同一块内存中。
对于 sparse 数组,它将创建一个哈希表,并分别存储指向每个元素的指针。
- JavaScript数组是真的数组还是只是以整数作为键的对象?
3。。它们是Object
数组是常规对象,具有一些使它们按预期运行的属性。
使用诸如1
之类的整数键(或代表诸如"1"
之类的整数的字符串)访问元素将检索该键下存储的任何内容。使用非整数(也不使用整数的字符串表示形式)仍将设置/获取对象属性。
数组length
只是对象的一个属性,其值不受修改对象属性的影响。
- 这个设计模式叫什么以便我可以进一步研究它?
4。不确定