如果我有一个只有数字键的Javascript列表,这会占用更少的内存?
var array = [];
array[0] = 'hello';
array[5] = 'world';
array[50] = 'foobar';
var obj = {};
obj[0] = 'hello';
obj[5] = 'world';
obj[50] = 'foobar';
我对Javascript引擎的内部结构并不了解,所以...
我问的原因是因为该数组在转换为字符串时会在其中间有一堆未定义的数组。那些实际上是以某种方式存储的,还是刚刚进行字符串转换?
答案 0 :(得分:12)
数组基本上是与单个变量名相关联的有序值集。
在您的示例中,我认为您尝试执行关联数组,并且您应该使用object,Array不应该用于键/值对。
当您为具有更高当前数组长度的索引分配值时,数组长度也会间接增加:
var array = new Array();
array[99] = "Test";
// array.length is now 100
检查此主题的detailed article。
答案 1 :(得分:0)
JavaScript不像其他语言那样实现数组,因此您不会获得普通数组固有的任何性能增强(以内存方式);在JavaScript中,数组与对象非常相似;实际上,它本质上只是一些额外的方法和功能(例如更新自身的长度)。我说两者都不会更快。
答案 2 :(得分:-1)
可能是Javascript数组,因为你可以“只”使用数字键值,其中对象文字为键值提供空间,即使你使用数字键值,它们的处理方式可能与数字键值不同。阵列。
原因数组很可能没有基于文本的键值,因为它们的处理方式与对象文字不同。我猜这是因为它们可能被区别对待,数组的处理可能更适合数字键值,因为对象文字被优化为使用字符串或数字作为键。