JS迭代器
2020 javascript迭代协议是 ES6 新增的,迭代协议不是内置的实现或者语法,而是一个协议。
迭代协议分为:可迭代协议和迭代器协议。
可迭代协议
可迭代协议允许 JavaScript 对象定义或定制它们的迭代行为。要成为可迭代对象,一个对象必须实现 @@iterator 方法。意味着对象或者原型链上必须有一个 @@iterator 属性,可以通过常量 Symbol.iterator 访问该属性。
[Symbol.iterator] : 一个没有参数的函数,返回一个迭代器对象
当一个对象被迭代时,它的 @@iterator 方法会被调用,然后使用返回的迭代器去迭代。
迭代器协议
迭代器协议定义了一个标准的方式去产生一系列的值。
一个对象必须具有符合条件 next() 方法才是一个迭代器。
- done(boolean) 迭代器还可以继续产生下一个值,则表示未迭代完毕,返回 false。如果一个迭代器迭代完毕,返回 true。
- value 迭代器返回一个 JavaScript 值。done 为 true 可以省略。
迭代器例子
一个标准的迭代器实现:
const myIterator = {
next: function() { ... },
[Symbol.iterator]: function() {
return this;
}
}
一个简易的迭代器:
function makeIterator(array) {
let nextIndex = 0;
return {
}
}