for循环和forEach的区别,一系列数组的map,for in,for of,迭代器又是啥?

106 阅读1分钟
  1. for循环和forEach的区别?
  2. 为啥数组有迭代器,对象没有?
  3. map,for in,for of,迭代器又是啥?

1. map,for in,for of,都是数组的方法,或者只有字符串,数组才能用,就是因为内部实现了迭代器

那么我根据一篇文章,以及mdn文档来看了一下mp.weixin.qq.com/s/gWQcONGim…

2. 简单看完之后, 我有些问题

  • for of 遍历对象因为没有迭代器,报错(obj是一个对象) image.png

  • 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);
}
  1. 这样就实现了一个迭代器,对象也可以使用for of

可以试一下:

console.log(iter().next());
console.log(iter().next());
console.log(iter().next());
console.log(iter().next());

image.png