迭代器与iterable
最近在学习ES6,有两个概念一直纠缠不清,就是迭代器与iterable,查阅了一些资料,简单来说迭代器就是包含next
方法的对象,而iterable
是包含可以在其值上迭代的迭代器的对象,但它必须支持一个函数,其名称是专门的ES6符号值 Symbol.iterator
,简单来说就是iterable要包含一个Symbol.iterator
方法,上代码吧:
var iterator = { next() { return { done: false, value: 'Love xia' }; }};
如上便是一个实现了标准迭代器接口的迭代器,需要说明的是迭代器不可for of遍历。
var iterable = { [Symbol.iterator]() { return this; }};
上面是一个iterable,虽然毫无意义,我的理解就是拥有Symbol.iterator
就拥有了资格,至于这个方法返回什么并不重要,为了有意义我们要返回迭代器,如下:
var iterable = { [Symbol.iterator]() { return { next() { return { value: 'Love xia', done: Math.random() > 0.7 } } }; }};
最后我们来做一个即是迭代器又是iterable
的对象来总结一下:
var it = { [Symbol.iterator]() { return this; }, next() { return { value: 'Love xia', done: false }; }};
理解有误的地方还请不吝指出。