forEach
forEach专门用来循环数组,对数组的每一个元素执行一次提供的函数(不能使用return、break、continue等中断循环,没有返回值),可以直接取到元素,同时也可以取到index值、数组。
let arr = [1, 2, 3, 4, 5]
arr.forEach(function(value, index, arr) {
console.log(index + ':' + value)
console.log(arr)
})
结果
1:1
(5) [1, 2, 3, 4, 5]
2:2
(5) [1, 2, 3, 4, 5]
3:3
(5) [1, 2, 3, 4, 5]
4:4
(5) [1, 2, 3, 4, 5]
5:5
(5) [1, 2, 3, 4, 5]
for in
遍历数据结构的键值,一般用来遍历对象,数组本身也是一种对象,在遍历时会输出传入的键值。key会变成字符串类型。
let arr = [1, 2, 3]
arr.c = 4
for(let a in arr) {
console.log(a)// 1, 2, 3, c 输出的为key(属性名称)
}
for of
可遍历key,value。
允许遍历 Array(数组)、String(字符串)、Map(映射)、Set(集合)、arguments对象、Nodelist对象等可迭代的数据结构,且支持return,但不能遍历obj对象。
因为obj对象没有Symbol.iterator属性,而以上数据结构部署了Symbol.iterator属性,for of循环遍历实际是调用了Symbol.iterator接口。