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

Чтобы предотвратить это, у нас есть методы с поддержкой JavaScript, такие как оператор …spread и object.assign().

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

Глубокое копирование. В отличие от поверхностного копирования, глубокое копирование создает копию всех элементов старого объекта, выделяет отдельные области памяти для нового объекта, а затем назначает скопированные элементы новому объекту. Таким образом, оба объекта независимы друг от друга, и любое изменение одного из них не влияет на другой. Также, если один из объектов удаляется, другой остается в памяти. Теперь для создания глубокой копии объекта в JavaScript мы используем методы JSON.parse() и JSON.stringify().

но все же есть загвоздка в плане типов и функций

функция приветствия полностью исчезла, а дата не является объектом, это строка в скопированном объекте

поэтому окончательное возможное решение — использовать библиотеку типа Lodash или написать собственный сложный код для обработки глубокого клонирования.