О чём речь
Поверхностная копия — spread / Object.assign. Глубокая для многих встроенных типов — structuredClone. JSON round-trip — только для JSON-подобных данных и с потерями.
Подробности
const originalArray = [1 , 2 , 3 ];
const shallowCopyArray = [...originalArray];
const originalObject = { a : 1 , b : 2 };
const shallowCopyObject = { ...originalObject };
const viaJson = JSON .parse (JSON .stringify (originalObject));
const deep = structuredClone ({ a : 1 , b : { c : 2 } });
structuredClone умеет циклы, Map/Set и много встроенных типов; кастомные классы и функции часто требуют своей логики.
Итог
Shallow — spread; deep — structuredClone (или доменная копия); JSON — не универсальный клон.