js 数组用 for in 循环

今天写数组循环的时候隐约觉得不管object还是array都用forin循环不就得了,写的还少。。哈哈,不过好像在哪里看过不要这样做,查了下资料,综合一下原因,不要使用forin循环数组哦。
  1. 数组是跳跃型的

    var a = [];
    a[5] = 5;
    for (var i = 0; i < a.length; i++) {
    //会按预想从零循环到5
    }

    var a = [];
    a[5] = 5;
    for (var x in a) {
    //只会循环index5。。。。。
    }

  2. 数组被添加了其他属性

    Array.prototype.foo = 1;
    var a = [1, 2, 3, 4, 5];
    for (var x in a){
    //foo也会被循环出来,不是我想要的。。。。
    }

  3. 数组顺序变化了

    var array = [];
    array[2] = 'c';
    array[1] = 'b';
    array[0] = 'a';
    for (var p in array) {
    //在某些浏览器上p 可能顺序是 "2", "1" and "0"
    }