1. 程式人生 > >for、for in、for of介紹

for、for in、for of介紹

for迴圈

表示式一般如下:

for(表示式1;表示式2;表示式3){

    表示式4;

}

執行的順序為:

1)第一次迴圈,即初始化迴圈。

首先執行表示式1(一般為初始化語句),再執行表示式2(一般為條件判斷語句)。如果符合,則執行表示式4,最後執行表示式3。否則,停止執行。

2)下次的迴圈:

首先執行表示式2,判斷是否符合表示式2的條件;如果符合,繼續執行表示式4,最後執行表示式3。否則停止執行。

for...in

表示式一般如下:

for(a in 物件){

   表示式1;

}

此處的a是物件中的key(鍵名)。

遍歷物件:

    var arr={ 
            name: "Peter",
            age:18,
            address:"beijing"
    }; 
    for(var i in arr){ 
            console.log(i);//name,age,address 
    }
    for(var i in arr){ 
            console.log(arr[i]);//name,age,address 
    }

    Array.prototype.number="2018";//為arr原型新增一個number屬性

    for(var i in arr){ 
            console.log(i);//name,age,address,number
    }

遍歷陣列:

// 遍歷出來的索引是key值
// meMethod 這個原型物件上的屬性也會被遍歷出來
// 出來的順序也不一定是原先書寫的順序
var arr = [1, 2, 3];
Array.prototype.myMethod = function () {
    console.log(this.length);
};
for(i in arr){
    console.log(i);//0,1,2,myMethod
}
for(i in arr){
    console.log(arr[i]);//1,2,3,4
}
  • 一般用於遍歷物件的可列舉屬性。以及物件從建構函式原型中繼承的屬性。對於每個不同的屬性,語句都會被執行(因為是key,所以直接得到的是屬性名)
  • 當使用for in遍歷陣列時,和遍歷物件的行為一樣,會遍歷陣列所有可列舉的屬性,所以原型物件上的方法和屬性也會被遍歷(陣列遍歷直接得到的是索引,屬性直接遍歷得到的是屬性名)
  • 遍歷的順序可能不是按照實際陣列的內部順序
  • 如果迭代的物件的變數值是null或者undefined, for in不執行迴圈體,建議在使用for in迴圈之前,先檢查該物件的值是不是null或者undefined

注意:遍歷得到的Key都是String型別,不可直接用於數值計算

綜上所述:不建議使用for...in遍歷陣列!

for...of

表示式一般如下:

for(a of 物件){

   表示式1;

}

看著和for...in很像,但是此處的a是物件中的value(值)。

for...of 專注於遍歷的 value 值的同時,不會發生原型物件,和物件本身的屬性被遍歷出來的問題。同樣是for...in的例子,它不會遍歷出meMethod的值。

for...of相比於for...in更適合遍歷陣列