Skip to main content
JavaScript & the browser·Module C6 · Lesson 9
TaskGiven function* digits() yielding 1..5, log [...digits()].join(','). Then destructure const [first, second, ...rest] = digits() — log first, second, rest.join(',').

Spread + destructuring with iterables

100 XP7 min
Theory

Spread on any iterable

The ... spread syntax calls [Symbol.iterator]() on whatever you spread. That means anything iterable works — Sets, Maps, strings, generators, NodeLists.

[...new Set([1, 2, 2, 3])];          // [1, 2, 3]
[..."abc"];                          // ["a", "b", "c"]
[...new Map([["a", 1], ["b", 2]])];  // [["a", 1], ["b", 2]]

function* g() { yield 1; yield 2; }
[...g()];                            // [1, 2]

Destructuring is iteration too

Array destructuring also calls the iterator protocol. The right side can be ANY iterable:

const [first, second] = new Set([10, 20, 30]); // 10, 20
const [a, b, ...rest] = generator();           // pulls 2 + rest

The unified mental model

for-of, [...x], new Set(x), Array.from(x), Promise.all(x) all call the iterator protocol. Once you implement Symbol.iterator (or write a generator), your value plays nicely with everything in the standard library.

🔒

Sign up to start coding

Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial — card required, cancel anytime.

Sign up — free trial →

First 10 lessons in each track are free. No card needed for those.

PreviousNext lesson →

Get one Python or web tip a day — by email

Short, hand-written, no spam. Unsubscribe in one click.