前两天参加了一次字节面试,其中一道题目是这样的。
说一下for in 和 for of 的区别
第一时间没反应过来,以为在考察这两个哪个适合便利对象,哪个适合便利数组。
答曰: for in 遍历的是key值,for of 遍历的是 value 值
for in更适合遍历对象(这里其实有一个坑 ,也就是为什么 for in 适合遍历对象的原因就是面试官要的答案)
面试官听完我的回答也愣了,表示说的也没错,但不是我要的。
然后给我举了一个例子
let a = ['1','2','3']
a.name = 'tom'
这个时候考察的东西就变了
他问我此时这个a分别会遍历出什么 像下面这样遍历 ↓
for(let i in a){console.log(i)} for(let j of a){console.log(j)}
问 i和j分别会输出什么
正确答案是i→ 0,1,2,name 而 j→ 1,2,3
原因是for in 会遍历原型链上的所有属性 而 for of并不会 !!!! 这里面有一个新的知识点Iterator 也就是遍历器接口 这个在阮一峰大师的ES6入门里有讲到,for of会去找这个接口,感兴趣的可以看一看
有问题欢迎留言!