Returns an iterator result object.
An iterator result object can have two properties: done and value.
If done is false or undefined, then the value property contains an iterator value.
The value property may not be present if the value would be undefined.
After a call that returns a result where done equals
true, all subsequent calls must also return done as true.