使用一個變量迭代一個對象的全部屬性值,對於每個屬性值,有一個指定的語句塊被執行。數組
一些對象的內置屬性是沒法被遍歷到的,包括全部的內置方法,例如String對象的indexOf方法。不過大部分的用戶自定義屬性都是可遍歷的。函數
【警告:永遠不要使用 for each...in語句遍歷數組,僅用來遍歷常規對象。(有可能會對數組順序發生改變)】spa
for each (variable in object) {
statement
}prototype
variable對象
用來遍歷屬性值的變量,前面的var關鍵字是可選的。該變量是函數的局部變量而不是語句塊的局部變量。繼承
objectit
該對象的屬性值會被遍歷。io
statementconsole
遍歷屬性值時執行的語句。 若是想要執行多條語句, 請用({ ... }) 將多條語句括住。變量
var sum = 0;
var obj = {prop1: 5, prop2: 13, prop3: 8};
for each (var item in obj) {
sum += item;
}
console.log(sum);
// output:logs "26", which is 5+13+8
以任意順序遍歷一個對象的可枚舉屬性。對於每一個不一樣的屬性,語句都會被執行。
for...in 循環只遍歷可枚舉屬性。
像 Array和 Object使用內置構造函數所建立的對象都會繼承自Object.prototype和String.prototype的不可枚舉屬性。
for (variable in object) {...}
variable
在每次迭代時,將不一樣的屬性名分配給變量。
object
被迭代枚舉其屬性的對象。
var obj = {a: 1, b: 2, c: 3};
for (const prop in obj) {
console.log(`obj.${prop} = ${obj[prop]}`);
}
// Output:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
在可迭代對象(包括 Array,Map,Set,String,TypedArray,arguments 對象等等)上建立一個迭代循環,調用自定義迭代例子,併爲每一個不一樣屬性的值執行語句。
對於for...of的循環,能夠由break, throw 或return終止。
for (variable of iterable) {
//statements
}
variable
在每次迭代中,將不一樣屬性的值分配給變量。
iterable
被迭代枚舉其屬性的對象。
let iterable = [10, 20, 30];
for (let value of iterable) {
value += 1;
console.log(value);
}
// 11
// 21
// 31
不管是for...in仍是for...of語句都是迭代一些東西。它們之間的主要區別在於它們的迭代方式。
for...in 語句以原始插入順序迭代對象的可枚舉屬性。
for...of 語句遍歷可迭代對象定義要迭代的數據。