В JavaScript у меня может быть массив с отверстиями:
a = [];
a[0] = 100;
a[5] = 200;
a[3] = 300;
a.forEach(function(x) {alert(x);});
Я не смог найти информацию о том, будут ли элементы обрабатываться в порядке возрастания, или это ненадежный факт.
Я проверил, что цикл "for.. in" пересекает индексы массива в порядке возрастания, в то время как имена свойств объекта просматриваются в том же порядке, в котором они были добавлены к объекту (по крайней мере, это выглядит так).
(Т.е. похоже, что массивы внутренне являются деревьями некоторого вида, а объекты являются хеш-таблицами.)
Я только что обнаружил, что Rhino JavaScript также пересекает несуществующие элементы: http://ideone.com/7Z3AFh (в отличие от forin).