The spread operator expands iterables into individual elements, while the rest syntax collects multiple elements into a single array or object, using the same three-dot notation in different contexts.
Spread syntax (...) expands an iterable (array, string, object) into individual elements. In arrays it unpacks elements; in objects it copies enumerable own properties into a new object.
Rest syntax (...) collects remaining elements or properties into an array or object. In function parameters it gathers extra arguments; in destructuring it captures leftovers.
Both use the same ... notation but serve opposite purposes: spread expands, rest collects. The context determines which operation occurs.
Interview framing: define Spread & Rest in one sentence, then explain one concrete runtime behavior and one common pitfall with a short code example.