links: [[YDK JS Chapter 3]]
---
Let's look at the interface of iterator and iterable to understand them clearly
"An object is an *Iterable* when it confirms to `Iterable` interface"
```
interface Iterable {
[Symbol.iterator]() {
// ...
return Iterator;
}
}
```
In simple words, any object is *iterable* (iter+able meaning able to be iterated) if it contains a method name `Symbol.iterator` (Symbols can also define methods) that returns an Iterator.
What's an Iterator?
"The *Iterator* object must confirm to `Iterator` interface."
The *Iterator* object must have a method `next()` that returns an object with properties `done` (a boolean indicating the end of the operation) and `value` (the item extracted from the collection at the iteration)
```
interface Iterator {
next() {
//...
return {
value: <value>,
done: <boolean>
}
}
}
```
[source](https://dmitripavlutin.com/javascript-iterators/)
---
tags: #javascript , #fundamentals