JS: Iterator
New in JS2015.
What is Iterator
An iterator object is any object with property key "next"
(own or inherited), and its value must be a function, and this function must return {done: boolean, value: value}
.
Technically, we say that Iterator is a object that conforms to the iterator Interface .
Purpose of Iterator
Iterator object is required as the return value of the function of
property key
Symbol.iterator
of a
Iterable Object
object.
Defining an Iterator
Here is a example of defining an iterator.
// create a iterator const itor = {}; itor.i = 0; itor.next = (() => ((itor.i < 3) ? { value: itor.i++, done: false } : { value: undefined, done: true })); // -------------------------------------------------- // test console.log(itor.next()); // { value: 0, done: false } console.log(itor.next()); // { value: 1, done: false } console.log(itor.next()); // { value: 2, done: false } console.log(itor.next()); // { value: undefined, done: true }
Defining a Iterable with Given Iterator
Here is a example of defining a iterable from a iterator.
// create a iterator const itor = {}; itor.i = 0; itor.next = (() => ((itor.i < 3) ? { value: itor.i++, done: false } : { value: undefined, done: true })); // create a iterable let xRable = { [Symbol.iterator]: (() => itor) }; // -------------------------------------------------- // spread operator test on iterable console.log(...xRable); // 0 1 2
Inherited Key βnextβ
Here is an example showing a iterator with inherited key "next"
.
// create a iterator const x1 = {}; x1.i = 0; x1.next = (() => ((x1.i < 3) ? { value: x1.i++, done: false } : { value: undefined, done: true })); // x2's parent is x1. x2 is now also a iterator const x2 = Object.create(x1); // create a iterable, using x2 let xRable = { [Symbol.iterator]: (() => x2) }; // -------------------------------------------------- // spread operator test on iterable console.log(...xRable); // 0 1 2