«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Понимание глубокого копирования в JavaScript

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

Опубликовано 1 ноября 2024 г.
Просматривать:961

JavaScript не нуждается в представлении, это надежный и универсальный язык, но если вы работали с ним, вы, вероятно, заметили некоторые необычные особенности его поведения. Один из них — то, как JavaScript обрабатывает копии переменных, особенно при работе с объектами. В этой статье мы рассмотрим концепцию глубокого копирования и то, как она помогает нам избежать неожиданных проблем при дублировании данных в наших программах.

Когда мы копируем переменную, JavaScript создает новое пространство памяти и сохраняет там скопированное значение; тогда новая переменная указывает на это новое пространство памяти. Например:


x = 5;
y = x;


y указывает на новое пространство памяти, которое имеет то же значение, что и x, т.е. 5 . будет примерно так:

Comprendiendo la copia profunda en JavaScript

Приведенная выше концепция применима только к примитивным значениям, для объектов она другая. Представьте, что у нас есть следующие два объекта:


let a = {
    name: 'Rick',
    lastName: 'Sanchez',
};

let b = a;


В приведенном выше примере b не имеет собственного пространства памяти, как можно было бы ожидать; вместо этого a указывает на область памяти, где хранится a.

Comprendiendo la copia profunda en JavaScript

Какие проблемы может вызвать такое поведение? По сути, если вы измените любое поле с a или b, обе переменные изменятся. Запустите следующий код и проверьте его самостоятельно.


let a = {
    name: 'Rick',
    lastName: 'Sanchez',
};

let b = a;

b.name = 'Morty';

console.log('a: ', a); // a:  { name: 'Morty', lastName: 'Sanchez' }
console.log('b: ', b); // b:  { name: 'Morty', lastName: 'Sanchez' }


Решение этой проблемы? Нам нужно сделать глубокую копию, чтобы сохранить значение a в новом независимом пространстве памяти, на которое указывает b.


const b = JSON.parse(JSON.stringify(a));


Таким образом, мы заставляем JavaScript создать новое пространство памяти, изменив формат с Object на JSON. Это делается с помощью метода stringify, затем JSON с собственным пространством памяти преобразуется обратно в объект с помощью метода parse, поэтому обе переменные остаются полностью независимыми.

Случалось ли с вами когда-нибудь такое странное поведение? Дайте знать в комментариях, буду рада вас прочитать!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/daniel1775/comprendiendo-la-copia-profunda-en-javascript-2oon?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3