Apabila bekerja dengan objek dan tatasusunan dalam JavaScript, membuat salinan struktur data adalah tugas biasa. Walau bagaimanapun, pembangun sering menghadapi cabaran apabila membuat keputusan antara salinan cetek dan salinan mendalam. Salah faham perbezaan boleh membawa kepada kesan sampingan yang tidak diingini dalam kod anda. Mari selami konsep ini, perbezaannya dan masa untuk menggunakannya.
? Muat turun eBuku - JavaScript: dari ES2015 hingga ES2023
Salinan cetek mencipta objek baharu dengan salinan sifat peringkat atas objek asal. Untuk sifat yang primitif (cth., nombor, rentetan, boolean), nilai itu sendiri disalin. Walau bagaimanapun, untuk sifat yang merupakan objek (seperti tatasusunan atau objek bersarang), hanya rujukan yang disalin—bukan data sebenar.
Ini bermakna walaupun objek baharu mempunyai salinan sifat peringkat atasnya sendiri, objek atau tatasusunan bersarang kekal dikongsi antara yang asal dan salinan.
const original = { name: "Alice", details: { age: 25, city: "Wonderland" } }; // Shallow copy const shallowCopy = { ...original }; // Modify the nested object in the shallow copy shallowCopy.details.city = "Looking Glass"; // Original object is also affected console.log(original.details.city); // Output: "Looking Glass"
const shallowCopy = { ...originalObject };
const shallowCopy = Object.assign({}, originalObject);
Walaupun kaedah ini pantas dan mudah, kaedah ini tidak sesuai untuk objek bersarang dalam.
Salinan dalam menduplikasi setiap sifat dan sub-sifat objek asal. Ini memastikan bahawa salinan adalah bebas sepenuhnya daripada yang asal dan perubahan pada salinan tidak menjejaskan objek asal.
Penyalinan dalam adalah penting apabila berurusan dengan struktur data yang kompleks seperti objek atau tatasusunan bersarang, terutamanya dalam senario di mana integriti data adalah kritikal.
const original = { name: "Alice", details: { age: 25, city: "Wonderland" } }; // Shallow copy const shallowCopy = { ...original }; // Modify the nested object in the shallow copy shallowCopy.details.city = "Looking Glass"; // Original object is also affected console.log(original.details.city); // Output: "Looking Glass"
const shallowCopy = { ...originalObject };
const shallowCopy = Object.assign({}, originalObject);
Feature | Shallow Copy | Deep Copy |
---|---|---|
Scope | Copies only top-level properties. | Copies all levels, including nested data. |
References | Nested references are shared. | Nested references are independent. |
Performance | Faster and lightweight. | Slower due to recursive operations. |
Use Cases | Flat or minimally nested objects. | Deeply nested objects or immutable structures. |
Menyalin objek tetapan pengguna untuk membuat pelarasan pantas:
const original = { name: "Alice", details: { age: 25, city: "Wonderland" } }; // Shallow copy const shallowCopy = { ...original }; // Modify the nested object in the shallow copy shallowCopy.details.city = "Looking Glass"; // Original object is also affected console.log(original.details.city); // Output: "Looking Glass"
Menduakan keadaan permainan atau aplikasi:
const shallowCopy = { ...originalObject };
Andaikan Salinan Cetek Sentiasa Mencukupi:
Menggunakan Kaedah JSON secara berlebihan:
Mengabaikan Prestasi:
Memahami perbezaan antara salinan cetek dan salinan dalam adalah penting untuk menulis kod JavaScript bebas pepijat. Salinan cetek adalah cekap untuk struktur rata, manakala salinan dalam amat diperlukan untuk objek yang kompleks dan bersarang. Pilih kaedah yang sesuai berdasarkan struktur data dan keperluan aplikasi anda, dan elakkan kemungkinan perangkap dengan mengetahui batasan setiap pendekatan.
? Muat turun eBuku - JavaScript: dari ES2015 hingga ES2023
Atas ialah kandungan terperinci JavaScript Shallow Copy vs Deep Copy: Contoh dan Amalan Terbaik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!