Javascript 中的数组对象实际上是对象类型的一个子类型,它在内存中的存储结构是连续一段的内存空间。
当我们声明、初始化一个数组时,JS 自动开辟一块内存空间来存储数组,存储的方式和其它语言不同,JS 数组可以存储任意类型的数据,而且不必声明数组的大小。在JS中,数组的大小可以动态变化,这意味着数组在内存中的大小不是固定的。
JS 数组在内存中的存储方式主要有两种:
- 基于索引偏移量的数组
每个数组元素在内存中都是连续的,我们可以通过数组的下标(索引)来访问数组的元素。这种数组在内存中的存储结构如下所示:
[0] [1] [2] ... [n-1]
- 基于哈希表的数组
基于哈希表的数组引入了一个哈希函数(Hash Function)来将元素的键转化成一个唯一的索引值,然后存储在哈希表中,这样就可以快速地查找到对应键值的元素。这种数组在内存中的存储结构如下所示:
{"a":value1, "b":value2, "c":value3}
需要注意的是,基于哈希表的数组在访问元素时的时间复杂度是 O(1),但由于要维护哈希表,可能会带来额外的时间和空间开销。