- for循环和forEach的区别?
- 为啥数组有迭代器,对象没有?
- map,for in,for of,迭代器又是啥?
1. map,for in,for of,都是数组的方法,或者只有字符串,数组才能用,就是因为内部实现了迭代器
那么我根据一篇文章,以及mdn文档来看了一下:
mp.weixin.qq.com/s/gWQcONGim…
2. 简单看完之后, 我有些问题
-
for of 遍历对象因为没有迭代器,报错(obj是一个对象)
-
for in 为啥可以呢,obj也没有迭代器,通过搜索,看到是因为for in自身实现了一个迭代器
3. 接着我手动去实现了一个迭代器
首先迭代器都是利用了 Symbol.iterator 去实现迭代器,并且看过文章,他需要一个next函数
let obj = {
a: 1,
b: 2,
c: 3,
};
let iter = obj[Symbol.iterator] = function () {
let values = Object.values(obj);
let index = 0;
return {
next() {
if (index >= values.length) {
//表示循环完成
return {
done: true,
};
} else {
return {
done: false,
value: values[index++],
};
}
},
};
};
for (let val of obj) {
console.log(val);
}
- 这样就实现了一个迭代器,对象也可以使用for of
可以试一下:
console.log(iter().next());
console.log(iter().next());
console.log(iter().next());
console.log(iter().next());