概述
迭代的定义:从一个数据集合中按照一定的顺序,不断取出数据的过程称为迭代。
迭代和遍历的区别
迭代:迭代强调的是依次取数据的过程,并不保证取多少,也不保证把所有的数据都取完
遍历:遍历强调的是要把整个数据依次全部取出
迭代器是一种特殊的对象,它具有一些专门为迭代过程设计的接口。所有迭代器都有一个next()
方法,每次调用都会返回一个结果对象。结果有两个属性,一个是value,标识下一个将要返回的值;另一个是一个布尔类型,当没有更多可返回数据时返回true。
迭代器还会保存一个内部指针,用来指向当前集合中值的位置,每调用一次next()
方法,都会返回下一个可用的值。
如果最后一个值返回后再调用next()
方法,那么返回的对象中属性done值为true,属性value则包含迭代器最终返回的值,这个返回值不是数据集的一部分,它与函数的返回值类似,是函数调用过程中最后一次给调用者传递信息的方法,如果没有相关数据则返回undefined。
为什么会出现迭代器
防止for循环遍历的过程中出错导致整个循环终止,此外还有自定义遍历逻辑的场景需要迭代器。
如何实现迭代器
实现迭代器的核心就是给被迭代对象添加一个属性key为Symbol.iterator
的方法,该方法返回一个next
函数,继续返回一个value
和done
,其中value为返回的迭代值,done
为当前迭代的状态,为false
的时候会继续迭代,直到done
为true
1 | var obj = { |