代码之家  ›  专栏  ›  技术社区  ›  Matchu

哪一个占用更少的内存:一个javascript数组或javascript对象?

  •  14
  • Matchu  · 技术社区  · 15 年前

    如果我有一个javascript列表,它只有数字键,占用的内存更少?

    var array = [];
    array[0] = 'hello';
    array[5] = 'world';
    array[50] = 'foobar';
    
    var obj = {};
    obj[0] = 'hello';
    obj[5] = 'world';
    obj[50] = 'foobar';
    

    我对JavaScript引擎的内部结构不太了解,所以…

    我问的原因是,当数组转换为字符串时,其中会有一堆未定义的。这些是以某种方式存储的,还是只是在字符串转换时放入的?

    3 回复  |  直到 15 年前
        1
  •  12
  •   Christian C. Salvadó    15 年前

    数组基本上是与单个变量名关联的一组有序值。

    在您的示例中,我认为您尝试执行关联数组,并且应该使用对象,数组不用于键/值对。

    此外,当您将值分配给具有更大当前数组长度的索引时,数组长度将不可分割地增加:

    var array = new Array();
    array[99] = "Test";
    // array.length is now 100
    

    检查这个 detailed article 关于这个问题。

        2
  •  0
  •   James    15 年前

    JavaScript不像其他语言那样实现数组,因此您不会获得普通数组固有的任何性能增强(内存方面);在JavaScript中,数组与对象非常相似;实际上,它本质上是一个具有一些额外方法和功能的对象(如更新自身的长度)。我认为两者都不快。

        3
  •  -1
  •   Tyler Carter    15 年前

    可能是因为“只能”使用数字键值,因为对象文本为键值提供了空间,即使使用数字键值,它们的处理方式也可能与数组的数字键值不同。

    最有可能的是 原因 数组不能具有基于文本的键值,因为它们的处理方式不同于对象文本。我猜想,因为它们可能被不同地对待,所以数组的处理可能更适合于数值键值,如果对象文字被优化为使用字符串或数字作为它们的键。