队列
MindMap
loading...
普通队列(数组实现)
使用 push 和 shift 的数组实现
JavaScript 数组的底层原理
传统意义上的数组有 3 个重要概念:连续内存、固定长度、相同的数据类型,参照 Java、CPP 中的数组。实际上 JavaScript 的数组并不符合上述的概念。因此,JavaScript 的 “数组” 本质上并不是数组。事实上 JSArray 继承自 JSObject,也就是说,数组是一个特殊的对象。数组内部是由快数组(FixedArray)和慢数组(HashTable)来实现的,快数组中有动态数组的扩容和收缩机制,当数组中 holes(空洞) 对象过多时,就会将快数组转换为慢数组。慢数组是一种哈希表的内存形式,由于内存是非连续的,其效率会比快数组低。
JavaScript 的数组是 V8 在底层实现上做了一层封装,使用两种数据结构实现数组,通过时间和空间纬度的取舍,优化数组的性能。
TIP
由于 JavaScript 中的数据结构大多在 V8 引擎中做了进一步的封装,因此在实现部分数据结构时,JavaScript 往往有更为简单的实现方法。
参考: