2011-08-30 47 views
5

我不确定Javascript引擎(特别是浏览器引擎)如何存储数组。JavaScript数组索引基础知识

例如 - 这将使用多少内存?

var x = new Array(0, 1, 2, 1000, 100000000); 

我想映射整数日期作为数组索引,但我需要确定它不是一个坏主意。

回答

11

阵列中只有一对夫妇的方式是“特殊”:

  • 他们已经从他们的原型(“切片()”等)
  • 他们已经得到了一些有趣的阵列状的方法跟踪最大的数字财产“名”

如果存储在10299123位置的东西在一个全新的阵列“魔法” length属性,运行时不使用你所有的内存分配的实际,空数组。相反,它不管你想存储和存储可确保length更新到10299124.

现在的问题具体的日期,如果你在谈论存储时间戳,就是(我认为)他们”大于32位整数。数组索引仅限于该大小。但是,这意味着length将不正确。如果你真的不关心任何的阵列东西反正那时候真的所有你需要的是一个普通的对象:

var dateStorage = {}; 

dateStorage[someDate.getTime()] = "whatever"; 

JavaScript对象可以作为名称 - 值映射只要名字可以表示作为一个字符串(数字显然是这样)。

+0

这是一个很好的答案。 –

+0

谢谢。我会享受更多有关JS中Array存储技术的回应。 Unix时间戳是32位整数。 –

+1

JavaScript数字类型的主题非常奇怪和复杂。 ECMA标准文档冗长乏味,但它对语言语义的描述非常清晰(如果详尽详细)。对我来说,数组描述尤其相当简单。 – Pointy