LEARNING JAVASCRIPT - Trang 199

CHAPTER 12

Iterators and Generators

ES6 introduces two very important new concepts: iterators and generators. Generators

depend on iterators, so we’ll start with iterators.
An iterator is roughly analogous to a bookmark: it helps you keep track of where you

are. An array is an example of an iterable object: it contains multiple things (like pages

in a book), and can give you an iterator (which is like a bookmark). Let’s make this

analogy concrete: imagine you have an array called

book

where each element is a

string that represents a page. To fit the format of this book, we’ll use Lewis Carroll’s

“Twinkle, Twinkle, Little Bat” from Alice’s Adventures in Wonderland (you can imag‐

ine a children’s book version with one line per page):

const

book

=

[

"Twinkle, twinkle, little bat!"

,

"How I wonder what you're at!"

,

"Up above the world you fly,"

,

"Like a tea tray in the sky."

,

"Twinkle, twinkle, little bat!"

,

"How I wonder what you're at!"

,

];

Now that we have our

book

array, we can get an iterator with its

values

method:

const

it

=

book

.

values

();

To continue our analogy, the iterator (commonly abbreviated as

it

) is a bookmark,

but it works only for this specific book. Furthermore, we haven’t put it anywhere yet;

we haven’t started reading. To “start reading,” we call the iterator’s

next

method,

which returns an object with two properties:

value

(which holds the “page” you’re

now on) and

done

, which becomes

false

after you read the last page. Our book is

only six pages long, so it’s easy to demonstrate how we can read it in its entirety:

175