Array spread is ES2015 and object spread is not — it is a stage 3 proposal, available only through Babel, and the syntactic similarity makes it very easy to assume both are standard.
const args = [...list]; // ES2015, native
const next = { ...state, loading: true }; // proposal, needs a plugin
// the portable version today
const next = Object.assign({}, state, { loading: true });
It matters when the code leaves the build — a shared utility copied into a Node script with no Babel step, a snippet pasted into a console. Both forms are shallow, so nested objects are still shared by reference either way. Enable it as a named plugin rather than through a stage preset, so the dependency on a proposal is written down.