PROG_WAY_BLOG Telegram 203
Понятие глубокого копирования

В JavaScript’e, да и в других языках, часто встречаются ссылочные типы данных, вокруг которых строится одновременно много самых различных полезных хаков и не очень полезных проблем.

Понятие глубокого копирования, на самом-то деле, достаточно простое. Рассмотрим код:

const obj = {
name: "Denis",
address: {
street: 'Lenina',
apartment: 10
}
}

const clone = Object.assign({}, obj)

obj.address.street = 'Pushkina'

console.log(clone.address.street) // Pushkina


В данном случае мы получим не ожидаемый для многих вывод в консоль. Связано это с тем, что Object.assign не осуществляет глубокое копирование.

На данный момент в памяти у нас есть три объекта:
— obj
— clone
— obj.address

И, на самом деле, obj.address === clone.address. Этот вложенный объект для obj и clone на самом деле — один и тот же объект в памяти, поскольку Object.assign полностью скопировал только примитивы, а поле address просто перенёс по ссылке.

Для решения этой проблемы можно воспользоваться рекурсивными алгоритмами на основе того же Object.assign для глубокого копирования объекта. Или же, если мы точно знаем какие поля будут в нашем объекте, можем воспользоваться следующим синтаксисом через spread оператор:

const obj = {
name: "Denis",
address: {
street: "Lenina",
apartment: 10
}
};

const clone = {
...obj,
address: {
...obj.address
}
};

obj.address.street = "Pushkina";

console.log(clone.address.street); // Lenina


Тут вывод уже будет ожидаемым, поскольку мы вручную пересоздали ссылку на объект в поле address и заполнили его значениями из исходного объекта. Однако стоит быть осторожным при копировании объектов таким способом и помнить, что spread оператор не копирует геттеры и сеттеры, как и Object.assign.

Подобные проблемы и решения также можно увидеть и в контексте массивов.

#javascript #theory #data
🔥20👍113🤯3🐳2🤔1



tgoop.com/prog_way_blog/203
Create:
Last Update:

Понятие глубокого копирования

В JavaScript’e, да и в других языках, часто встречаются ссылочные типы данных, вокруг которых строится одновременно много самых различных полезных хаков и не очень полезных проблем.

Понятие глубокого копирования, на самом-то деле, достаточно простое. Рассмотрим код:

const obj = {
name: "Denis",
address: {
street: 'Lenina',
apartment: 10
}
}

const clone = Object.assign({}, obj)

obj.address.street = 'Pushkina'

console.log(clone.address.street) // Pushkina


В данном случае мы получим не ожидаемый для многих вывод в консоль. Связано это с тем, что Object.assign не осуществляет глубокое копирование.

На данный момент в памяти у нас есть три объекта:
— obj
— clone
— obj.address

И, на самом деле, obj.address === clone.address. Этот вложенный объект для obj и clone на самом деле — один и тот же объект в памяти, поскольку Object.assign полностью скопировал только примитивы, а поле address просто перенёс по ссылке.

Для решения этой проблемы можно воспользоваться рекурсивными алгоритмами на основе того же Object.assign для глубокого копирования объекта. Или же, если мы точно знаем какие поля будут в нашем объекте, можем воспользоваться следующим синтаксисом через spread оператор:

const obj = {
name: "Denis",
address: {
street: "Lenina",
apartment: 10
}
};

const clone = {
...obj,
address: {
...obj.address
}
};

obj.address.street = "Pushkina";

console.log(clone.address.street); // Lenina


Тут вывод уже будет ожидаемым, поскольку мы вручную пересоздали ссылку на объект в поле address и заполнили его значениями из исходного объекта. Однако стоит быть осторожным при копировании объектов таким способом и помнить, что spread оператор не копирует геттеры и сеттеры, как и Object.assign.

Подобные проблемы и решения также можно увидеть и в контексте массивов.

#javascript #theory #data

BY progway — программирование, IT




Share with your friend now:
tgoop.com/prog_way_blog/203

View MORE
Open in Telegram


Telegram News

Date: |

But a Telegram statement also said: "Any requests related to political censorship or limiting human rights such as the rights to free speech or assembly are not and will not be considered." On June 7, Perekopsky met with Brazilian President Jair Bolsonaro, an avid user of the platform. According to the firm's VP, the main subject of the meeting was "freedom of expression." As five out of seven counts were serious, Hui sentenced Ng to six years and six months in jail. 3How to create a Telegram channel? Just at this time, Bitcoin and the broader crypto market have dropped to new 2022 lows. The Bitcoin price has tanked 10 percent dropping to $20,000. On the other hand, the altcoin space is witnessing even more brutal correction. Bitcoin has dropped nearly 60 percent year-to-date and more than 70 percent since its all-time high in November 2021.
from us


Telegram progway — программирование, IT
FROM American