ES6 新的迭代迴圈方法,基本上這與傳統上陣列的forEach()
方法是類似的,另外這跟for...in
迴圈很相似,但這兩者的用法是不同的,以下會多舉例比較他們之間的關係。
for...in
是取得物件的 "鍵名/屬性名",而for...of
是取得物件的 "鍵值/屬性值"let arr = ['a', 'b', 'c', 'd'];
// for...in 取得 "鍵名/屬性名"
for (let key in arr) {
console.log(key); // '0' '1' '2' '3'
}
// for...of 取得 "鍵值/屬性值"
for (let value of arr) {
console.log(value); // 'a' 'b' 'c' 'd'
}
// 使用在字串上
let string = 'Hello';
for (let i of string) {
console.log(i); // 'H' 'e' 'l' 'l' 'o'
}
let arr = ['a', 'b', 'c']
arr.text = 'Hello';
for (let i in arr) {
if (arr.hasOwnProperty(i)) {
console.log(i); // '0', '1', '2', 'text'
}
}
for (let i of arr) {
console.log(i); // 'a', 'b', 'c'
}
entries()
方法來獲取[key, value]
let arr = ['a', 'b', 'c', 'd'];
for (let [key, value] of arr.entries()) {
console.log(key, value);
}
// 0, 'a'
// 1, 'b'
// 2, 'c'
// 3, 'd'
undefined
// 內層為陣列類型時
let arr = [
[1, 2, 3],
[4, 5, 6],
['Hello', 'world']
];
for (let [x, y, z] of arr) {
console.log(x, y, z);
}
// 1, 2, 3
// 4, 5, 6
// 'Hello', 'world', undefined
// 內層為物件類型時
let family = [
{name: 'ES6', type: 'JavaScript'},
{name: 'for', type: 'Iterator'}
];
for (let {name, type} of family) {
console.log(name + ': ' + type);
}
// 'ES6: JavaScript'
// 'for: Iterator'