Похоже, вы путаете JavaScript объекты массива с тем фактом, что все объекты являются ассоциативными массивами .Обратите внимание, что обычные объекты (например, объект «Fruit», на которые вы ссылаетесь) не имеют внутреннего упорядочения свойств (ключей), в отличие от объектов Array (из-за естественного упорядочения интегральных индексов).По сути, массив - это просто объект со специальным свойством «length», в котором хранится последний целочисленный индекс (начиная с нуля) плюс один.
Любые свойства объекта будут повторяться в произвольно (например, случайный) порядок:
var obj = {a:'Aye', b:'Bee', c:'See', d:'Dee'};
for (var prop in obj) {
alert(prop + '=' + obj[prop]); // No order is guaranteed.
}
Строго говоря, четные массивы не гарантируются спецификацией для итерации в естественном порядке с использованием цикла for-in
;однако, большинство интерпретаторов JavaScript делают так или иначе.(Примечательно, что IE8 выполняет итерацию в том порядке, в котором были назначены индексы, а не в естественном порядке.) Вот почему вы должны всегда выполнять итерацию массивов, используя индексы в простом цикле «for».
var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
for (var i=0; i<arr.length; i++) { // i = [0 .. length-1]
alert(arr + '=' + arr[i]); // Explicitly order as 'a', 'b', 'c'...
}
Эти различия означают, что независимоот того, как определен ваш объект "Fruit", нет надежного способа обеспечить строгое упорядочение ключей (например, "Banana", "Apple", "Color", "Size" и т. д.), если вы не сохраните свой собственный порядок отдельно.