Mengubah suai salinan objek JavaScript menyebabkan perubahan pada objek asal
P粉765684602
2023-08-27 18:32:45
<p>Saya sedang menyalin <kod>objA</kod>
<pre class="brush:php;toolbar:false;">const objA = { prop: 1 },
const objB = objA;
objB.prop = 2;
console.log(objA.prop); // log 2 bukannya 1</pre>
<p>Array juga mempunyai masalah yang sama</p>
<pre class="brush:php;toolbar:false;">const arrA = [1, 2, 3],
const arrB = arrA;
arrB.push(4);
console.log(arrA.length); // `arrA` mempunyai 4 elemen dan bukannya 3.</pre>
<p><br /></p>
Untuk meringkaskan, hanya untuk menjelaskan, terdapat empat cara untuk menyalin objek JS.
...{}
或Object.assign()
.lodash
.Object.create()
确实创建了一个新对象。这些属性在对象之间共享(更改其中一个也会更改另一个)。与普通副本的区别在于,属性被添加到新对象的原型__proto__
di bawah. Ini juga boleh digunakan sebagai salinan cetek apabila anda tidak pernah menukar objek asal, tetapi saya mengesyorkan menggunakan salah satu kaedah di atas melainkan anda memerlukan tingkah laku ini secara khusus.Jelas sekali anda mempunyai beberapa salah faham tentang perkara yang dilakukan oleh pernyataan
var tempMyObj = myObj;
itu.Dalam JavaScript, objek diluluskan dan diperuntukkan melalui rujukan (lebih tepat, nilai rujukan), jadi
tempMyObj
和myObj
adalah semua rujukan kepada objek yang sama.Berikut ialah ilustrasi ringkas untuk membantu anda membayangkan perkara yang sedang berlaku
Seperti yang anda lihat selepas tugasan, kedua-dua rujukan menghala ke objek yang sama.
Jika anda perlu mengubah suai satu tetapi tidak yang lain, anda perlu membuat salinan.
Jawapan lama:
Berikut ialah beberapa cara lain untuk membuat salinan objek
Memandangkan anda sudah menggunakan jQuery:
Gunakan JavaScript biasa
Lihat di sini dan di sini