La modification d'une copie d'un objet JavaScript entraîne la modification de l'objet d'origine
P粉765684602
2023-08-27 18:32:45
<p>Je copie <code>objA</code> dans <code>objB</code></p>
<pre class="brush:php;toolbar:false;">const objA = { prop: 1 },
const objB = objA ;
objB.prop = 2;
console.log(objA.prop); // enregistre 2 au lieu de 1</pre>
<p>Les tableaux ont également le même problème</p>
<pre class="brush:php;toolbar:false;">const arrA = [1, 2, 3],
const arrB = arrA;
arrB.push(4);
console.log(arrA.length); // `arrA` a 4 éléments au lieu de 3.</pre>
<p><br /></p>
Pour résumer, juste pour clarifier, il existe quatre façons de copier un objet JS.
...{}
或Object.assign()
.lodash
.Object.create()
确实创建了一个新对象。这些属性在对象之间共享(更改其中一个也会更改另一个)。与普通副本的区别在于,属性被添加到新对象的原型__proto__
ci-dessous. Cela peut également être utilisé comme une copie superficielle lorsque vous jamais modifiez l'objet d'origine, mais je vous recommande d'utiliser l'une des méthodes ci-dessus, sauf si vous avez spécifiquement besoin de ce comportement.De toute évidence, vous avez un malentendu sur ce que fait la déclaration
var tempMyObj = myObj;
.En JavaScript, les objets sont passés et alloués par référence (plus précisément, la valeur de la référence), donc
tempMyObj
和myObj
sont toutes des références au même objet.Voici une illustration simplifiée pour vous aider à visualiser ce qui se passe
Comme vous pouvez le voir après le devoir, les deux références pointent vers le même objet.
Si vous devez modifier l'un mais pas l'autre, vous devez créer une copie.
Ancienne réponse :
Voici quelques autres façons de créer des copies d'objets
Puisque vous utilisez déjà jQuery :
Utilisez du JavaScript simple
Voir ici et ici