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

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

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

Shallow Copy vs Deep Copy in JavaScript

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

Поверхностное копирование
Неполная копия создает новый объект или массив, содержащий те же значения, что и оригинал. Однако если оригинал содержит вложенные объекты или массивы, неглубокая копия копирует только ссылки на эти вложенные структуры, а не сами структуры. Это означает, что изменения во вложенных объектах или массивах в скопированной структуре также повлияют на оригинал.

Примеры методов поверхностного копирования:

  1. Оператор расширения ({...})
const original = { a: 1, b: { c: 2 } };
const shallowCopy = { ...original };

Здесь поверхностное копирование — это новый объект, но мелкокопий.b по-прежнему ссылается на тот же объект, что и исходный.б.

2.Object.assign()

const shallowCopy = Object.assign({}, original);
  1. Метод среза массива
const originalArray = [1, 2, 3];
const shallowCopyArray = originalArray.slice();

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

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

  1. JSON.stringify() и JSON.parse()
const original = { a: 1, b: { c: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));

Этот метод сериализует объект в строку JSON, а затем анализирует его обратно в новый объект. Однако он не обрабатывает функции, неопределенные или циклические ссылки.

2.Рекурсивная функция

function deepCopy(obj) {
  if (obj === null || typeof obj !== 'object') return obj;

  const copy = Array.isArray(obj) ? [] : {};
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      copy[key] = deepCopy(obj[key]);
    }
  }
  return copy;
}

  1. StructuredClone() (в современных средах JavaScript)
const deepCopy = structuredClone(original);

Когда использовать каждый

  • Поверхностное копирование: Подходит для простых объектов или массивов без вложенных структур. Это быстрее и использует меньше памяти. Используйте его, когда вам нужно быстрое копирование, когда изменения во вложенных объектах должны отражаться как в оригинале, так и в копии.

  • Глубокое копирование: Необходимо для сложных объектов или массивов с вложенными структурами. Это гарантирует, что изменения в копии не повлияют на оригинал. Используйте его, когда вам нужны полностью независимые клоны.

Понимание этих различий помогает предотвратить ошибки, возникающие из-за непреднамеренных общих ссылок, и обеспечивает целостность данных в ваших приложениях.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/sagarj521/shallow-copy-vs-deep-copy-in-javascript-4dmo?1. Если обнаружено какое-либо нарушение авторских прав, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

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

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

Copyright© 2022 湘ICP备2022001581号-3