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
在我身后,微笑着活下去。

浙公网安备 33010602011771号