for、for in、for of介紹
阿新 • • 發佈:2018-12-13
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更適合遍歷陣列