Глубокое копирование против поверхностного копирования в JavaScript

Поверхностное копирование

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

const a = {
    name: 'S. Sahu',
    addr:  {
        city: 'Behrampur',
    }
}
const b = {...a}; // shallow copy occurs here
// the above operator is called 'Shallow Operator'
b.addr.city = "Sambalpur"; // Shallow Copy
b.name = "A. Panda"; // Deep Copy
// separate references for name is created here
console.log(a.name, b.name); 
// a.addr and b.addr point to the same object reference
console.log(a.addr, b.addr);

Выход :

Sambalpur Sambalpur
S. Sahu A. Panda

Глубокое копирование

Глубокая копия копирует все поля и создает копии динамически выделенной памяти, на которую указывают поля. Глубокая копия возникает, когда объект копируется вместе с объектами, на которые он ссылается.

const a = {
    name: 'S. Sahu',
    addr:  {
        city: 'Behrampur',
    }
}
const b = {
    name: a.name,
    addr: {
        city: a.city
    }
};
b.addr.city = "Sambalpur";
b.name = "A. Panda";
console.log(a.addr.city, b.addr.city);
console.log(a.name, b.name)

Выход :

Behrampur Sambalpur
S. Sahu A. Panda

Создать ссылку

Создается ссылка на исходный объект. Любые изменения, внесенные в новый объект, отражаются в исходном объекте.

const a = {
    name: 'S. Sahu',
    addr:  {
        city: 'Behrampur',
    }
}
const b = a;
b.addr.city = "Sambalpur";
b.name = "A. Panda";
console.log(a.addr.city, b.addr.city);
console.log(a.name, b.name)

Выход :

Sambalpur Sambalpur
A. Panda A. Panda

!! Удачного кодирования !!