Iterable and Iterator

An Iterable is an object with a [Symbol.iterator] / @@iterator method which returns an Iterator.
String, Array, TypedArray, Map, Set, arguments, and a few DOM structures are iterables.
WeakSet and WeakMap are not iterables (The values returned by entries(), keys(), and values() from Objects, Arrays, TypedArrays, Sets, and Maps are also iterables.)

Iterables can be used:
- as the RHS of a destructuring assignment
- with the spread operator ... in an expression
- in for-of loops
- as the argument to Array.from(), Set(),

WeakSet(), Map(), WeakMap()
- as the argument to Promise.all() and

Promise.race()
- in generators to yield* all items

An Iterator is an object with a special next() method that returns an object with two properties -- value and done. To iterate over the values of an Iterator, I, use I.next().value. Consider using an iterator over a generic for or while loop.