迭代器和生成器区别

2021-08-24  本文已影响0人  AAA前端

迭代器

迭代器是一种特殊对象,它具有一些专门为迭代过程设计的专有接口, 所有的迭代对象都有一个next 方法, 每次调用都返回一个结果对象。结果对象有两个属性:

生成器

生成器是一种返回迭代器的函数,通过function关键字后的星号(*)来表示,函数中会用到新的 关键字 yield.星号可以紧挨着function关键字,也可以在中间添加空格。

function *createIterator(){
  yield 1;
  yield 2;
  yield 3;
}

let iterator = createIterator();
console.log(iterator.next().value); //1
console.log(iterator.next().value); //2
console.log(iterator.next().value); //3

生成器的调用方式与普通函数相同,只不过返回的是一个迭代器。

yield关键字值可在生成器内部使用,在其他地方使用会导致程序抛出语法错误,几遍在生成器内部的函数中使用也会报错。

可迭代对象和for-of循环

可迭代对象具有Symbol.iterator属性,是一种与迭代器密切相关的对象。Symbol.iterator通过指定的函数可以返回一个作用于附属对象的迭代器。
ES6中,所有的集合对象(数组,对象,Set集合,Map集合)和字符串都是可迭代对象,这些对象都有默认的迭代器。 ECMAScript中新加入的特性for-of循环需要用到迭代器对象的这些功能。

内建迭代器

ES6中已经默认为许多内建类型提供了内建迭代器,只有当这些内建迭代器无法实现你的目标时才需要自己创建,通常是自定义的对象和类时,才会遇到这种情况。

集合对象迭代器

ES6中有3中类型的集合对象:数组、Map集合,Set集合。为了更好的访问对象中的内容,这三种对象都内建了三种迭代器:

参考:深入理解ES6

上一篇下一篇

猜你喜欢

热点阅读