The spread operator works on any iterable. It takes every single item from an iterable and applies it to the containing array / object. Basically, it unpacks a thing into multiple things.

See the Pen thecodelog.com - ES6 Spread Operator 1 by Deano (@deangilewicz) on CodePen.

The spread operator can also be used to copy an existing array (fresh copy and not a reference).

See the Pen thecodelog.com - ES6 Spread Operator 2 by Deano (@deangilewicz) on CodePen.

You can use the spread operator along with slice to remove items from an array and return a new array containing the remaining items.

See the Pen thecodelog.com - ES6 Spread Operator 3 by Deano (@deangilewicz) on CodePen.

A spread operator can be used with a function call.

See the Pen thecodelog.com - ES6 Spread Operator 4 by Deano (@deangilewicz) on CodePen.

You can use the spread operator within a function which becomes a rest parameter that gathers the rest of the values into an array.

See the Pen thecodelog.com - ES6 Spread Operator 5 by Deano (@deangilewicz) on CodePen.

Spread operators can be used with Objects.

See the Pen thecodelog.com - ES6 Spread Operator 6 by Deano (@deangilewicz) on CodePen.

Just like Object.assign, the properties are overwritten by other objects that have the same properties later in the parameters order.