Maison  >  Article  >  interface Web  >  La différence entre la copie superficielle JavaScript et la copie profonde

La différence entre la copie superficielle JavaScript et la copie profonde

PHP中文网
PHP中文网original
2017-06-23 10:44:541553parcourir

Avant de comprendre ce que sont la copie superficielle et la copie profonde, vous devez d'abord comprendre les caractéristiques de stockage des types valeur et des types référence en JavaScript.

1. Il existe deux types de types de valeurs :
Types de données de base : chaîne, nombre, boolearn, non défini, null
Types de données composites : Tableau, Objet, Fonction, Date, RegExp.. .

2. Assignation
```2.1 Exemple d'affectation de type de données de base

   var num = 123;
   var num2 = num;

"
* Les caractéristiques de stockage de l'affectation de type de valeur, toutes les données dans la variable Faites une copie et stockez-la dans la nouvelle variable.
* `var num = 123` signifie que le nombre stocké dans la variable est 123.
* Copiez ensuite les données, ce qui signifie copier 123. Puis dans la mémoire Il y a 2 éléments de données
* Attribuez les données copiées à `num2` Les modifications de la valeur variable de num2 n'affecteront pas la valeur variable de num
* Sa caractéristique est qu'il y a **deux copies. de données** dans la mémoire.


"2.2 Exemple d'affectation de type de données composite

var o = { name: '张三' };
var obj = o;

"
* L'affectation consiste à copier les données stockées dans la variable o, puis attribuez les données Give obj
* La caractéristique est qu'il n'y a qu'une seule copie des données dans la mémoire et que les valeurs d'attribut de nom de l'objet o et de l'objet obj pointent vers la même adresse
. * Problème : La modification de l'attribut name dans l'objet obj affectera l'objet d'origine o. La valeur correspondant à l'attribut name

La question est alors de savoir comment un type de données composite peut attribuer une valeur à un autre objet sans affecter. sa propre valeur lorsqu'un autre objet modifie la valeur ? 🎜>Permettez-moi de parler de ma compréhension de la copie profonde et de la copie superficielle :

# Copie profonde et copie superficielle

1. qu'est-ce que la copie superficielle

Copie superficielle : *Copie uniquement les attributs de l'objet actuel. Lorsque les attributs de l'objet actuel sont des types de référence, cela n'est pas pris en compte.

Copie profonde : * Toutes les structures de référence des données de l'objet actuel sont copiées et les données sont indépendantes en mémoire. Les modifications n'affecteront pas les propriétés de l'objet copié


2.



Exemple de test :

var deepCopy = function () {
   // 1, 创建一个对象
   var temp = {};
   // 2, 拷贝属性, 判断如果是引用类型需要深拷贝
   for ( var k in this ) {
      if ( typeof this[ k ] === 'object' ) {
         temp[ k ] = this[ k ].deepCopy();
      } else {
         temp[ k ] = this[ k ];
      }
      // temp[ k ] = this[ k ];
   }
   // 3, 返回对象
   return temp;
};

Ce qui précède explique comment implémenter la copie approfondie

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn