Rumah > Artikel > hujung hadapan web > Shallow Copy lwn. Deep Copy dalam JavaScript
Dalam JavaScript, menyalin objek atau tatasusunan boleh dikategorikan kepada salinan cetek dan salinan dalam. Memahami perbezaan adalah penting apabila berurusan dengan struktur data yang kompleks, terutamanya yang mengandungi objek atau tatasusunan bersarang.
Panduan ini menerangkan konsep ini, ciri-cirinya, kaedah untuk melaksanakannya dan masa untuk menggunakannya.
Takrif
Salinan cetek mencipta pendua sifat peringkat atas sesuatu objek atau tatasusunan. Walau bagaimanapun, untuk objek atau tatasusunan bersarang, hanya rujukan yang disalin, bukan data sebenar.
Ciri-ciri
1.1 Menggunakan Object.assign()
const original = { a: 1, b: { c: 2 } }; const shallowCopy = Object.assign({}, original); shallowCopy.b.c = 42; console.log(original.b.c); // OUTPUT: 42 (The original object also affected due to shared reference)
1.2 Menggunakan Operator Spread (...)
const original = { a: 1, b: { c: 2 } }; const shallowCopy = { ...original }; shallowCopy.b.c = 90; console.log(original.b.c); // OUTPUT: 90
1.3 Mari lihat contoh salinan cetek pada Kaedah Tatasusunan (hirisan, concat)
const original = [1, 2, [3, 4]]; const shallowCopy = original.slice(); shallowCopy[2][0] = 10; console.log(original[2][0]); // OUTPUT: 10
Takrif
Salinan dalam mencipta pendua bebas sepenuhnya bagi objek atau tatasusunan. Semua peringkat, termasuk struktur bersarang, disalin secara rekursif. Perubahan pada struktur yang disalin tidak menjejaskan yang asal, begitu juga sebaliknya.
Ciri-ciri
2.1 Menggunakan JSON.stringify() dan JSON.parse()
const original = { a: 1, b: { c: 2 } }; const deepCopy = JSON.parse(JSON.stringify(original)); deepCopy.b.c = 42; console.log(original.b.c); // OUTPUT: 2 (original remains unaffected)
2.2 Menggunakan structuredClone()
Kaedah moden untuk penyalinan dalam yang menyokong rujukan bulat dan objek khas seperti Tarikh.
const original = { a: 1, b: { c: 2 }, date: new Date() }; const deepCopy = structuredClone(original); deepCopy.b.c = 42; console.log(original.b.c); // OUTPUT: 2 console.log(original.date === deepCopy.date); // FALSE
2.3 Menggunakan Fungsi Rekursif Tersuai
Penyelesaian yang fleksibel untuk mengendalikan kes kompleks secara manual.
function deepCopy(obj) { if (obj === null || typeof obj !== "object") return obj; if (Array.isArray(obj)) return obj.map(deepCopy); const copy = {}; for (const key in obj) { if (obj.hasOwnProperty(key)) { copy[key] = deepCopy(obj[key]); } } return copy; } const original = { a: 1, b: { c: 2 } }; const deepCopyObj = deepCopy(original); deepCopyObj.b.c = 42; console.log(original.b.c); // OUTPUT: 2
Salinan Cetek
Salinan Dalam
Salinan Cetek
Salinan Dalam
Ini ialah penjelasan mendalam tentang salinan Cetek dan salinan Deep objek dalam JavaScript. Pilih kaedah yang sesuai berdasarkan kes penggunaan dan keperluan prestasi anda.
Atas ialah kandungan terperinci Shallow Copy lwn. Deep Copy dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!