Iterable protocol yêu cầu object có method Symbol.iterator trả về iterator object (có next() trả về {value, done}).
Arrays, Strings, Maps, Sets implement sẵn. Custom iterables cho phép dùng for...of, spread, destructuring. Generator functions tự động tạo iterable.
javascript
class Range {
constructor(start, end) { this.start = start; this.end = end; }
[Symbol.iterator]() {
let current = this.start;
const end = this.end;
return {
next() {
return current <= end
? { value: current++, done: false }
: { value: undefined, done: true };
}
};
}
}
for (const n of new Range(1, 3)) console.log(n); // 1, 2, 3