for in 和 for of 的区别

76 阅读1分钟

for in 适用于可枚举数据,例如对象,数组,字符串。

for of 适用于可迭代数据,例如Array,String,Map,Set,函数的arguments对象,NodeList对象。

简单来说它们都是用来遍历属性。

  1. 可枚举 属性enumerable的值为true,通过Object.getOwnPropertyDescriptors()查看

image.png

  1. 可迭代
  • 具有symbol.iterator属性,它对应得值是一个函数,调用这个函数可以得到一个对象,每次调用对象得next方法能得到目标得每一项。

image.png

for in 得到的是(索引值)key。

for in 原型上的可枚举属性能被遍历到。

如果不想遍历原型方法和属性的话,可以使用hasOwnProperty()方法可以判断某属性是不是该对象的实例属性

Array.prototype.foo = 4
const arr = [1,2]

for(const item in arr) {
  console.log(arr[item]); //1,2,4
}

for(const item in arr) {
  if(arr.hasOwnProperty(item)) {
    console.log(arr[item]); //1,2
  } 
}

for of 一般得到的是value。

for of 一般只能遍历自身。

Array.prototype.foo = 4
const arr = [1,2]

for(const item of arr) {
  console.log(item); //1,2
}

for of 遍历对象,可以使用Object.keys()方法。也可以使用for in循环。

var obj = {
  name:'zark',
  age:2,
}
for (var key of Object.keys(obj)) {
  console.log(obj[key]); //zark 2
}