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