美文网首页
迭代协议

迭代协议

作者: bestCindy | 来源:发表于2022-03-01 23:44 被阅读0次

    什么是可迭代协议

    ES6 规定,如果一个对象具有符号属性Symbal.iterator,并且属性值是一个迭代器的函数,则该对象是可迭代的(iterable)

    for-of 循环

    for-of 循环用于遍历可迭代对象,格式如下

    //迭代完成后循环结束
    for (const item of iterable) {
        //iterable: 可迭代对象
        //item: 每次迭代得到的数据
    }
    

    举个例子

    现在有一个数组

    const arr = [1, 2, 3, 4, 5]
    

    我们用迭代器的方法遍历这个数组

    const iterator = arr[Symbol.iterator]();
    let result = iterator.next();
    while (!result.done) {
      const item = result.value; // 取出数据
      console.log(item);
      // 下一次迭代
      result = iterator.next();
    }
    

    用 for-of 遍历

    for (const item of arr) {
      console.log(item);
    }
    

    这俩效果是一样的,上面迭代器的方法可以看作是 for-of 的语法糖

    执行 for-of 的时候调用了 [Symblo.iterator]

    我们可以自定义一个可迭代的对象,让对象以 { propName, propValue }的形式输出

    var obj = {
      a: 1,
      b: 2,
      [Symbol.iterator]() {
        const keys = Object.keys(this);
        let i = 0;
    
        return {
          next: () => {
            const propName = keys[I];
            const propValue = this[propName];
    
            const result = {
              value: {
                propName,
                propValue,
              },
              done: i >= keys.length
            }
            I++;
    
            return result
          }
        }
      }
    }
    
    for (const item of obj) {
      console.log(item);
    }
    

    相关文章

      网友评论

          本文标题:迭代协议

          本文链接:https://www.haomeiwen.com/subject/xszjrrtx.html