gli array si ciclano con il for, gli oggetti con il for in poichè se cicli un array con un for in rischi di ritrovarti anche le prototype nel ciclo, se assegnate.
var a = [1,2,3];
for(var i = 0; i < a.length; i++){
alert(a[i]);
}
stamperà sempre e comunque 1, poi 2 ed in fine 3 ... nessun undefined, nessuna prototype