Iterator

Iterator

Iterator(遍历器、迭代器) 是一个对象,Iterator对象需要包含一个next方法,该方法返回一个对象IteratorObject,此对象有两个属性,一个value表示当前结果,一个done是一个布尔值表示是否可以继续迭代


let it = makeIterator();

function makeIterator() {
  let nextIndex = 0;
  return {
    next: function() {
      return nextIndex < 5 ?
      {value: nextIndex++, done: false} :
      {value: undefined, done: true};
    }
  };
}
  • ES6 规定,如果数据结构的Symbol.iterator属性是一个方法,该方法返回Iterator对象,就可以认为此数据结构是“可遍历的”(iterable
interface Iterable {
  [Symbol.iterator]() : Iterator,
}

interface Iterator {
  next(value?: any) : IterationResult,
}

interface IterationResult {
  value: any,
  done: boolean,
}

可迭代协议

迭代器协议定义了产生一系列值(无论是有限个还是无限个)的标准方式。当值为有限个时,所有的值都被迭代完毕后,则会返回一个默认返回值。

  • ES6中以下场合会默认调用 Iterator 接口(即Symbol.iterator方法),
  • for…of循环
  • 数组解构
  • 扩展运算符
  • yield*
  • 其他隐式调用的地方,例如 new Set(['a','b']),Promise.all()
  • ES6中以下数据结构默认为可遍历对象,即默认部署了Symbol.iterator属性
  • Array
  • Map
  • Set
  • String
  • 函数的 arguments 对象
  • NodeList 对象
let str = 'abc'
console.log(str[Symbol.iterator])
//ƒ [Symbol.iterator]() { [native code] }

提前终止迭代器

可选的return方法用于指定在迭代器提前关闭时执行逻辑。

  • for-of循环通过break、continue、return或throw提前退出
  • 数组的迭代器就是不能关闭的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值