Symbol的Symbol.iterator

Symbol.iterator介绍

MDN上定义**Symbol.iterator **为每一个对象定义了默认的迭代器。该迭代器可以被 `[for...of](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of)` 循环使用。

个人理解就是一个迭代器一个可遍历的方法,JS中数组中的数组成员都是有顺序的,例如下标,而对象就就没有。使用iterator接口就可以实现

  • 1
 let obj = {
      data: ["1", "2", "3"],
      [Symbol.iterator]() {
        const self = this;
        let index = 0;
        return {
          next() {
            if (index < self.data.length) {
              return {
                value: self.data[index++],
                done: false,
              };
            } else {
              return { value: undefined, done: true };
            }
          },
        };
      },
    };
    for (let i of obj) {
      console.log(i); // 1 2 3
    }
  • 2
  let obj = {
      name: "Cola",
      age: 19,
    };

    obj[Symbol.iterator] = function* fun() {
      yield 1;
      yield 2;
      yield 3;
    };
    console.log(obj);

    for (let i of obj) {
      console.log(i); // 1 2 3
    }

你可能感兴趣的:(Symbol的Symbol.iterator)