你總是可以參考ECMAScript標準時的疑惑:Array Exotic Objects
陣列是一種特殊的語言中的對象,它有length屬性是如何處理對於那些從0整數屬性的其他語義到2^32。在JavaScript中,如果在0到長度屬性排除的範圍內有缺失值,則數組可能很稀疏。各種陣列方法考慮到這一點,例如forEach忽略缺失值
什麼是缺失值?
該語言試圖使數組儘可能地像普通對象一樣工作:您可以向其添加任何屬性,甚至可以擁有從數組繼承的對象。
var fruits = ["Apple", "Banana"];
fruits.preferred = "Apple";
這種代碼不會造成任何問題,但如果你開始寫:
fruits[100] = "Strawberry";
for(let i = 0; i < fruits.length; ++i) {
...
}
100是在範圍內的屬性名稱[0,2^32),所以是一個數組元素,但在這一點上fruits.length應該是什麼?它必須是101,否則for循環永遠不會得到「草莓」。
但是在這一點上,您必須接受有一系列從未定義的元素[2,99]:這些元素是缺失的值。
反之亦然,當你修改length屬性
var fruits = ["Apple", "Banana"];
fruits.length = 0;
現在for循環將永遠不會在陣列中的任何元素同樣必須是真實的:這相當於排空水果陣列。
也有可能來增加長度,具有缺失值
的結果
所以是數組是有序的,你可以重複其在提高訂單的所有元素,但請記住,可能有遺漏值
數組是有序集合。 – MinusFour
爲什麼你會認爲數組順序不會被保留?據我所知,只有對象屬性順序不能保證。 – Xufox
我遇到過訂單未被保存(使用其他語言)的情況,因此提出了問題。 – Dementic