Думайте о массиве JavaScript как о обычном объекте со специальным свойством с именем length
(на самом деле, он немного сложнее).Таким образом, поведение цикла for..in такое же, как и для других объектов:
var a = new Array();
a[1] = "a";
alert(a.length); // 2
alert(a[0]); // undefined
a[1000] = "b"
alert(a.length); // 1001
a[-1] = "c";
alert(a[-1]); // c
a.abc="why not";
for(var key in a)
{
alert(key+"="+a[key]);
}
// 1=a
// 1000=b
// -1=c
// abc=why not
Также обратите внимание, что в вашем массиве могут быть пробелы без необходимости платить цену памяти.