遍歷陣列的方法,會對陣列裡的每一項目執行一次,裡面也可以放function。
找出大於20的數字,例:
let luckyNumbers = [50,20,60,7,13];
luckyNumbers.forEach( function checkNum(n) {
if (n > 20) {
//會列出符合條件的n
console.log(n);
}
});
//放裡面的function也可以匿名
luckyNumbers.forEach(function(n) {
if (n > 20) {
console.log(n);
}
});
//也可以這樣寫,function放外面
luckyNumbers.forEach(checkNum2);
function checkNum2(n) {
if (n > 20) {
console.log(n);
}
}
//在forEach()裡用箭頭函式
luckyNumbers.forEach((n) => {
if (n > 20) {
console.log(n);
}
});
執行結果:
function放外面:
第二個變數,會列出數字順序,也就是元素索引index:
luckyNumbers.forEach((n,b) => {
if (n > 20) {
console.log(b);
console.log(n);
}
});
執行結果:
第三個變數,會列出陣列本身:
luckyNumbers.forEach((n,b,c) => {
if (n > 20) {
console.log(c);
console.log(b);
console.log(n);
}
});
執行結果:
for loop寫法:
let luckyNumbers = [50,20,60,7,13];
for (let i = 0; i < luckyNumbers.length; i++) {
if (luckyNumbers[i] > 20) {
console.log(luckyNumbers[i]);
}
}
執行結果:
for of只能應用在string、array、類陣列(例:NodeList)......等,如果用在物件要搭配Object.keys()
。
補充:類陣列可使用.length查看長度,也可以索引,但它不是陣列,所以沒陣列所擁有的其他屬性方法。
for loop、forEach()、for of loop寫法比較:
let numbers = [10, 20 ,30];
//for loop
for (i = 0 ;i < numbers.length; i++) {
console.log(numbers[i]);
}
//forEach(),好處是增加可閱讀性
numbers.forEach((n) => {
console.log(n);
});
//for of loop,先宣告一個變數,numbers陣列裡有這些變數
for (let n of numbers) {
console.log(n);
}
for (let i of numbers) {
console.log(numbers[i]);
}
執行結果:
for of用在string:
let name = "Harry";
for (let n of name) {
console.log(n);
};
執行結果:
for of用在物件搭配Object.keys()
:
let student={
name:'kanboo',
age:16,
locate:{
country:'tw',
city:'taipei',
school:'CCC'
}
}
//搭配`Object.keys()`
for(let key of Object.keys(student)){
//使用Object.keys()方法取得物件的Key的陣列
console.log(key+": "+student[key]);
}
//物件直接使用for of 會出錯
for (let n of student) {
console.log(n);
};
執行結果:
for in 可直接應用在物件
、string、array、類陣列(例:NodeList)......等。
let student={
name:'kanboo',
age:16,
locate:{
country:'tw',
city:'taipei',
school:'CCC'
}
};
//物件直接使用for in
for (let n in student) {
console.log(n);
console.log(......);
console.log(student[n]); //找出屬性
};
執行結果:
for in 用在陣列:
let numbers = [10, 20 ,30]
for (let n in numbers) {
console.log(n); //可以被列舉出來的值,都是這個變數代表的含意,就是0 1 2
}
console.log("......");
for (let n in numbers) {
console.log(numbers[n]);
}
執行結果:
Array.prototype.forEach() - JavaScript | MDN
Array.from() - JavaScript | MDN
JS-for...in與for...of的差別 | Kanboo Notes
for...of - JavaScript | MDN