Мелкое копирование объектов

Говорят, что объект неглубоко скопирован, если исходные свойства верхнего уровня копируются без какой-либо ссылки и существует исходное свойство, значение которого является объектом и копируется как ссылка. Если исходное значение является ссылкой на объект, оно копирует только это ссылочное значение в целевой объект.

Неглубокая копия будет дублировать свойства верхнего уровня, но вложенный объект используется совместно исходным (источником) и копией (целевым).

Пример: использование метода 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;
}