关于生成器(Generator)和迭代器(Iterator)

今天想说说ES6中一个新增的特性,生成器和迭代器。

为什么要引入这个特性呢?大概是因为在JS以前的方法中,如果我们想遍历循环数组类的数据类型,大概会利用for循环,但是在循环的过程中,我们不得不定义一个变量来跟踪遍历的位置。问题就在于有些时候我们用不到for循环里的位置变量,而是对数组里的数据更感兴趣。还有,有的时候循环的层次一旦变多,就容易出现位置变量弄混,重复覆盖等问题,这个时候,生成器和迭代器就出现了。

那么就开始瞎8说说了。

啥是迭代器

当我们学习一个新的特性时,第一个疑问大概是它到底是啥,它的数据类型是什么。其实迭代器就是一种对象,一点都不神秘,一点也不新鲜,所以下面都是叫迭代器对象。

那么这种对象有什么特殊之处呢?

迭代器对象它有一个重要的API,就是next()方法,你可以直接在迭代器对象身上多次调用。而调用不是白调用的,调用next()方法会返回一个“结果对象”。这个结果对象呢有两个属性:

  • value

迭代器它其实是一种对象(没啥牛的)主要用到的方法就一个其实,就是next()方法。当我们在迭代器身上调用next()方法以后得到又是一个结果对象,这个结果对象呢,有两个属性。一个是value:表示下一个将要得到的值;另一个是done:表示是否还有数据。注意上面的next()方法不是只能调用一次,可以多次调用,每次调用都会返回下一个结果对象。但是多次调用也不代表可是无数次调用,当没有数据返回时,以后的每次调用的结果对象都是:

你可能感兴趣的:(关于生成器(Generator)和迭代器(Iterator))