Rumah > hujung hadapan web > tutorial js > Shallow Copy vs Deep Copy dalam JavaScript

Shallow Copy vs Deep Copy dalam JavaScript

WBOY
Lepaskan: 2024-07-26 20:45:00
asal
799 orang telah melayarinya

Shallow Copy vs Deep Copy in JavaScript

Apabila bekerja dengan JavaScript, memahami perbezaan antara salinan cetek dan salinan dalam adalah penting untuk manipulasi objek dan tatasusunan yang berkesan. Mari kita mendalami maksud istilah ini dan cara melaksanakan setiap jenis salinan dalam kod anda.

Salinan Cetek
Salinan cetek mencipta objek atau tatasusunan baharu yang memegang nilai yang sama seperti yang asal. Walau bagaimanapun, jika asal mengandungi objek atau tatasusunan bersarang, salinan cetek hanya menyalin rujukan kepada struktur bersarang ini, bukan struktur itu sendiri. Ini bermakna perubahan pada objek atau tatasusunan bersarang dalam struktur yang disalin juga akan mempengaruhi yang asal.

Contoh Kaedah Salinan Cetek:

  1. Operator Spread ({...})
const original = { a: 1, b: { c: 2 } };
const shallowCopy = { ...original };
Salin selepas log masuk

Di sini, shallowCopy ialah objek baharu, tetapi shallowCopy.b masih merujuk objek yang sama seperti original.b.

2.Object.assign()

const shallowCopy = Object.assign({}, original);
Salin selepas log masuk
  1. Kaedah hirisan susunan
const originalArray = [1, 2, 3];
const shallowCopyArray = originalArray.slice();
Salin selepas log masuk

Salinan Dalam
Salinan dalam mencipta objek atau tatasusunan baharu yang merupakan klon bebas yang lengkap daripada asal, termasuk semua objek dan tatasusunan bersarang. Perubahan kepada salinan dalam tidak menjejaskan yang asal dan sebaliknya.

Contoh Kaedah Salin Dalam:

  1. JSON.stringify() dan JSON.parse()
const original = { a: 1, b: { c: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));
Salin selepas log masuk

Kaedah ini mensirikan objek kepada rentetan JSON dan kemudian menghuraikannya kembali kepada objek baharu. Walau bagaimanapun, ia tidak mengendalikan fungsi, rujukan tidak ditentukan atau bulatan.

2.Fungsi Rekursif

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;
}

Salin selepas log masuk
  1. StructuredClone() (dalam persekitaran JavaScript moden)
const deepCopy = structuredClone(original);
Salin selepas log masuk

Bila Gunakan Setiap

  • Salinan Cetek: Sesuai untuk objek atau tatasusunan ringkas tanpa struktur bersarang. Ia lebih pantas dan menggunakan kurang memori. Gunakannya apabila anda memerlukan salinan pantas di mana perubahan pada objek bersarang harus ditunjukkan dalam kedua-dua asal dan salinan.

  • Salinan Dalam: Diperlukan untuk objek atau tatasusunan kompleks dengan struktur bersarang. Ia memastikan bahawa perubahan pada salinan tidak menjejaskan yang asal. Gunakannya apabila anda memerlukan klon bebas sepenuhnya.

Memahami perbezaan ini membantu mengelakkan pepijat yang timbul daripada rujukan dikongsi yang tidak diingini dan memastikan integriti data dalam aplikasi anda

Atas ialah kandungan terperinci Shallow Copy vs Deep Copy dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan