浅谈for in 和for of的使用

117 阅读1分钟

区别

for of适合遍历数组,不能遍历对象。
for in适合遍历对象,不建议用来遍历数组,下面会解释。

适用情景

es5的forEach和map并不能被break中断也不能被return返回到外层。
for in和for of可以正确响应break\return\continue

遍历数组

for in 遍历数组的索引,for of遍历数组的元素值。
for in会遍历数组所有可枚举的属性,包括原型,所以尽量别用for in遍历数组

var arr = [1,2,3]
arr.name = "数组"

打印arr会输出: 1、2、3、数组
而用for of则只有:1、2、3

遍历对象

for of不能遍历对象,因为for of没有迭代器对象。 for in遍历对象的键值,包括原型方法和属性。

Object.prototype.method=function(){
  console.log(this);
}
var myObject={
  a:1,
  b:2,
  c:3
}
for (var key in myObject) {
  console.log(key); //a、b、c、mehod
}

不想遍历原型时可以用hasOwnPropery方法过滤。
Object的hasOwnProperty()方法返回一个布尔值,判断对象是否包含指定的自身(实例、非继承)属性。

for (var key in myObject) {
  if(myObject.hasOwnProperty(key)){
    console.log(key);//a、b、c
  }
}

ES5的Object.keys(myObject)获取的键值也不包括原型方法和属性。