📜  JavaScript |迭代器

📅  最后修改于: 2022-05-13 01:58:09.779000             🧑  作者: Mango

JavaScript |迭代器

它是一个允许我们遍历列表或集合的对象或模式。迭代器定义序列并实现迭代器协议,该协议通过使用包含值和完成的 next() 方法返回对象。该值包含迭代器序列的下一个值,如果序列的最后一个值已被消耗,则 done 是布尔值 true 或 false,否则为 true,否则为 false。我们可以检查任何实体是否默认可迭代

我们可以检查它的原型,看看它是否有方法Symbol(Symbol.iterator) 。在Array.prototype你会发现Symbol(Symbol.iterator): ƒ values() method 。数组默认是可迭代的。此外,String、Map 和 Set 是内置的可迭代对象,因为它们的原型对象都具有Symbol.iterator()方法。

  • 程序:
                        
    
  • 输出:
    {"value":"a","done":false}{"value":"b","done":false}
    {"value":"c","done":false}{"done":true}

使用for.of 循环,我们可以迭代任何遵循可迭代协议的实体(例如:对象)。 for.of 循环将通过每次调用next() 方法来提取获得返回的值。

  • 程序:
                        
    
  • 输出:
    abc

可迭代协议:对象必须定义一个带有“Symbol.iterator”键的方法,该键返回一个本身遵循迭代器协议的对象。对象必须定义“next”方法,该方法返回具有两个属性“value”和“done”的对象

  • 句法:
    {value: 'item value', done: boolean}
  • 错误场景:
    var newIt = arr[Symbol.iterator]
    
    newIt()
    
    //Because it does not properly bind
    Uncaught TypeError: Cannot convert undefined or null to object 
    //How we can fix this 
    //var newIt = arr[Symbol.iterator].bind(arr); 
    
    newIt()
    Array Iterator { }
    

创建我们自己的可迭代对象:

  • 
    
  • 输出:
    0 1 2 3 4