Мелкое копирование объектов
Говорят, что объект неглубоко скопирован, если исходные свойства верхнего уровня копируются без какой-либо ссылки и существует исходное свойство, значение которого является объектом и копируется как ссылка. Если исходное значение является ссылкой на объект, оно копирует только это ссылочное значение в целевой объект.
Неглубокая копия будет дублировать свойства верхнего уровня, но вложенный объект используется совместно исходным (источником) и копией (целевым).
Пример: использование метода Object.assign ()
Метод Object.assign () используется для копирования значений всех перечислимых собственных свойств из одного или нескольких исходных объектов в целевой объект.
Глубокая копия объекта
Глубокая копия будет дублировать каждый встреченный объект. Копия и исходный объект не будут иметь ничего общего, поэтому это будет копия оригинала.
Пример: использование JSON.parse (JSON.stringify (объект));
Другой способ глубокого клонирования
function cloneObject(obj) {
var clone = {};
for(var i in obj) {
if(obj[i] != null && typeof(obj[i])=="object")
clone[i] = cloneObject(obj[i]);
else
clone[i] = obj[i];
}
return clone;
}