1. forEach不能遍历部分类数组对象

- 因为forEach是数组原型上的方法,部分类数组对象上没有forEach方法
- 解决方法:
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<script>
const domBox = document.getElementsByClassName('box')
domBox.forEach(element => {
console.log(element)
});
const domBox = document.querySelectorAll('.box')
domBox.forEach(element => {
console.log(element)
});
const domBox = document.getElementsByClassName('box')
for (const iterator of domBox) {
console.log(iterator)
}
</script>
2. 中断循环方式不同
- for循环通过continue中断一次循环,break中断后续循环,不能使用return中断(会报错)
- forEach是函数,不能使用continue和break中断循环,可以使用return中断一次循环,throw中断后续循环
let a = [1, 2, 3, 4]
for (var i = 0; i < a.length; i++) {
if (i === 2) {
continue
}
console.log(a[i])
}
try {
a.forEach(element => {
if (element === 2) {
throw new Error('中断循环')
}
console.log(element)
})
} catch (error) {}
3. forEach执行时,数组长度会锁定,更改后不影响后续操作
let a = [1, 2, 3, 4]
a.forEach((element, index, arr) => {
if (index === 2) {
arr.push(5)
}
console.log(element)
})
console.log(a)
a.forEach((element, index, arr) => {
console.log(index)
index++
})
4. forEach没有返回值,就算使用的return,也没有返回值
- 由于forEach方法接收的是一个回调函数,在回调函数中使用return,并不会影响forEach方法的返回值
let a = [1, 2, 3, 4]
const res = a.forEach((element, index, arr) => {
return 111
})
console.log(res)
5. for循环性能上比forEach更快