2011-08-30 45 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