for in 和 for of的区别

参考原文:

https://www.jianshu.com/p/c43f418d6bf0?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=qq

在下面代码中,使用for of 循环遍历data(data是一个对象)

function queryString(data) {
  let params = ''
  for (let [key, value] of data.entries) {
    params += `&${key}=${encodeURIComponent(value)}`
  }
  return params.substring(1) // 去除第一个&
}


在浏览器中报错:

意思是data不是一个可迭代对象。然后我该用for in 循环,就不报错。虽然问题解决了,但是不明白其中的原因。for of 和 for in到底有什么区别呢?

 

for of 使用遍历数组、字符串、map、set等实现iterator()接口的集合。而普通对象(Object)并没有实现迭代器接口,所以for of不支持遍历普通对象。

 

for...of的原理
or-of循环首先调用集合的Symbol.iterator方法,紧接着返回一个新的迭代器对象。迭代器对象可以是任意具有.next()方法的对象;for-of循环将重复调用这个方法,每次循环调用一次。举个例子,这段代码是我能想出来的最简单的迭代器:

var zeroesForeverIterator = {
 [Symbol.iterator]: function () {
   return this;
  },
  next: function () {
  return {done: false, value: 0};
 }
};

for in 遍历的是数组的索引(即键名),而for of 遍历的是数组元素值。
for of 遍历的只是数组内的元素,而不包括数组的原型属性,method和name.

for in的详情查看链接:https://www.imooc.com/article/12984

 

posted @ 2019-04-03 15:46  丝血反杀闰土的猹007  阅读(303)  评论(0)    收藏  举报