Q48 [Coding]: Make a custom object iterable using Symbol.iterator.

const range = {
  start: 1,
  end: 3,
  [Symbol.iterator]() {
    let current = this.start;
    let last = this.end;
    return {
      next() {
        if (current <= last) {
          return { value: current++, done: false };
        }
        return { value: undefined, done: true };
      }
    };
  }
};
// Usage: for (let num of range) console.log(num); // Logs: 1, 2, 3
Key Takeaways
  • Implementing [Symbol.iterator] enables for...of loops and spread syntax ([...obj]).
  • Iterator methods return objects conforming to { value, done } contracts.
Knowledge Check

Which built-in loop syntax consumes objects that implement the Symbol.iterator interface?