Во-первых, этот код может не работать , если вы переопределили свои глобальные объекты - Object.assign
является статическим методом, но потому что вы рассматриваете Object
как фактический объект (экземпляр Object
), тогда он не будет доступен через этот метод.
Код будет работать только в том случае, если вы переименуете переменные - я только что их поместил в нижний регистр - или если вы поймете, что вы помещаете функцию Object
в массив.
Первая строка:
array.push(Object.assign({}, JSON.parse(JSON.stringify(object))));
Вставит глубокую копию object
в массив. Глубокое копирование означает, что нет ссылок - это два совершенно разных объекта. Изменение оригинала object
не приведет к изменению глубокой копии object
внутри array
. Функции и методы будут удалены, как и все значения undefined
. Циркулярные ссылки (например, window.window.window...
) также потерпят неудачу (потому что вы пытаетесь поместить бесконечное количество символов в строку - никогда не будет хорошей идеей
Вторая строка:
array.push(Object.assign({}, object));
Переместит мелкую копию из object
в array
. Это означает, что свойства самого объекта будут скопированы по значению, а свойства внутри вложенных объектов будут скопированы по ссылке.
Третья строка:
array.push(object);
Перенесет ссылку на object
в array
. Это означает, что если object
изменяется, object
внутри array
также будет изменен.