for in与for of的区别

254 阅读1分钟

for of的特点:

  • for of 循环用来获取一对键值对中的值

  • for of是ES6新增的一个遍历数组的方法,为了弥补for in的一些不足:for … in会遍历对象的整个原型链,性能非常差不推荐使用,而for … of只遍历当前对象不会遍历原型链

  • for… of循环同时支持break,continue,return(在函数中调用的话)并且可以和对象解构赋值一起使用

  • 一个数据结构只要部署了 Symbol.iterator 属性(包括 Array,Map,Set,String,TypedArray,arguments 对象等等), 就被视为具有 iterator接口, 就可以使用 for of循环。

因此对象(Object)直接用for of遍历会报错; 可以先将object用Object.entries方法转化为包含键值对的数组,用for of遍历

let obj={a:1,b:2,c:3}
let newObj=Object.entries(obj)//[[a,1],[b,2],[c,3]]
for (let  [key,value] of newObj) {
   console.log(key,value)
}

for in的特点:

  • for … in 循环返回的值都是数据结构的 键值名。 遍历对象返回的对象的key值; 遍历数组返回的数组的下标(key)。

  • for … in 循环不仅可以遍历数字键名,还会遍历原型上的key值和手动添加的其他键;

  • 特别情况下, for … in 循环会以任意的顺序遍历键名

总结一句: for in 循环特别适合遍历对象。