JavaScript中的数组是什么类型的列表?

JavaScript中的数组是什么类型的列表?,javascript,Javascript,可能是个愚蠢的问题,但我想知道JavaScript中数组背后的实现是什么?它们是SLL(单链表)还是DLL(双链表)还是其他什么?取决于浏览器。为什么这很重要 可能只是一个哈希表 是的,这是一个愚蠢的问题,你真的不知道,它在不同的实现(V8、Rhino等)之间可能会有所不同,这取决于当前编译器的开发人员喜欢什么。Javascript数组只是一个简单的对象 数组是类似列表的对象,其原型具有执行遍历和变异操作的方法 从 编辑 正如@Alnitak所说,上述内容与实现无关。JS中对象的实现取决于Jav

可能是个愚蠢的问题,但我想知道JavaScript中数组背后的实现是什么?它们是SLL(单链表)还是DLL(双链表)还是其他什么?

取决于浏览器。为什么这很重要

可能只是一个哈希表


是的,这是一个愚蠢的问题,你真的不知道,它在不同的实现(V8、Rhino等)之间可能会有所不同,这取决于当前编译器的开发人员喜欢什么。

Javascript数组只是一个简单的对象

数组是类似列表的对象,其原型具有执行遍历和变异操作的方法

编辑

正如@Alnitak所说,上述内容与实现无关。JS中对象的实现取决于Javascript引擎。

取自V8
Object.h

// The JSArray describes JavaScript Arrays
//  Such an array can be in one of two modes:
//    - fast, backing storage is a FixedArray and length <= elements.length();
//       Please note: push and pop can be used to grow and shrink the array.
//    - slow, backing storage is a HashTable with numbers as keys.
class JSArray: public JSObject {
//JSArray描述JavaScript数组
//这种阵列可以采用以下两种模式之一:

//-快速备份存储是一个固定的数组,长度不重要,只是我好奇而已。这不是一个完全愚蠢的问题-底层实现会影响(例如)数组查找是否为O(1),以及删除元素(不是最后一个元素)的操作(如
array.shift()
是否为O(n)或者不是。@Alnitak-当然Javascript处理的数据结构很小,就像处理网页一样。不一定-我用JS数组来保存成千上万的数据points@EdHeal很好,在我的经验中,我对JS引擎进行了介绍,但也介绍了如何使用数组。例如,将属性指定给数组可能会阻止引擎使用更优化的数据结构。有很多关于JS引擎实现及其执行的优化类型的文章。请记住,这些引擎正在积极开发中,因此实现细节将随着时间的推移而改变implementation@Alnitak,我同意你的看法。但在问题中,作者提到了“SLL(单链表)或DLL(双链表)”,我猜他(或她)只是不知道JS数组只是对象。如果他知道这一点,他就不会猜测对象的实现是某种链表。嗨,埃文,这应该是对主要问题的回答。