这还要从一道面试题说起,请问下面两种情况分别打印什么:
let arr = [1,2,3,4,5]
for(let i in arr) {
console.log(i) // 0,1,2,3,4
}
for(let i of arr) {
console.log(i) // 1,2,3,4,5
}
可以看到,for in遍历的是数组索引,也是数组的键,for of遍历的是数组值,再看下面的例子
let arrObj1 = {
a:1,
b:2,
c:3
}
for(let i in arrObj1) {
console.log(i) // a b c
}
for(let i of arrObj1) {
console.log(i) // Uncaught TypeError: arrObj1 is not iterable at <anonymous>:1:14
}
for in遍历键,输出a b c,for of报错了,当前对象不可遍历
到这里我们大致可以得出一些结论了,就是:
for in即可以遍历数组,也可以遍历对象
for of只能遍历数组
继续研究一下for in
let bb = [1,2,3]
bb.__proto__.name = 'tttt'
for(let i in bb) {
console.log(i) // 0 1 2 name
}
可以看到,for in还会遍历数组原型上的属性和方法<