JavaScript 中的稀疏數組
JavaScript 中的一個常見誤解是假設數組是連續的,這意味著它們包含索引0 中的所有元素到目前的長度。然而,事實並非如此:JavaScript 陣列是稀疏的。
當使用大於目前長度的索引存取或設定元素時,會建立一個空槽並將陣列擴展到適當的位置尺寸。例如,如果使用 array[Date.getTime()] 設定一個值,則該陣列將擴展為包含從索引 0 到目前時間的空槽,即使這些槽不會被使用。
雜湊表實作
稀疏數組在內部實作為雜湊表。鍵可以是整數、字串、浮點數或其他對象,在加到雜湊之前,會使用 toString() 將其轉換為字串。這允許靈活的索引系統。
測試範例
要確認陣列的稀疏性質,請考慮以下測試程式碼:
var array = []; array[0] = "zero"; array[new Date().getTime()] = "now"; array[3.14] = "pi"; for (var i in array) { alert("array[" + i + "] = " + array[i] + ", typeof(" + i + ") == " + typeof(i)); }
此程式碼將顯示:
array[0] = zero, typeof(0) == string array[1254503972355] = now, typeof(1254503972355) == string array[3.14] = pi, typeof(3.14) == string
for...in 語法迭代定義的索引,示範當存取或設定具有非順序索引的元素時,陣列會使用空槽進行擴充。
瀏覽器差異
不同的瀏覽器以類似的方式處理稀疏數組,作為哈希表實現的數組。但是,在處理非常大的索引時,考慮使用稀疏數組非常重要,因為這會影響記憶體消耗和效能。
以上是JavaScript 陣列真的是連續的嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!