Maison > interface Web > js tutoriel > le corps du texte

Copie complète des objets JavaScript

PHPz
Libérer: 2017-04-04 10:18:43
original
1033 Les gens l'ont consulté

Le

type de données de js peut être divisé en deux grandes catégories :

  • Type de valeur (type d'origine) :
    Par exemple, les types String et Number sont tous deux des types valeur.

  • RéférenceType :
    Par exemple, Objet, Array sont des types de référence.

Parlons brièvement de la différence entre eux :
La différence la plus évidente est l'affectation. L'affectation du type de valeur est une véritable copie affectation à une nouvelle variable :

var a, b = "issax";
a = b;
a +="_coder";
console.log(a);  //issax_coder
console.log(b);  //issax
Copier après la connexion

Regardez l'exemple ci-dessus, après avoir assigné b à a, les deux les variables a et b sont indépendantes l'une de l'autre. Changer leurs propres valeurs n'affectera pas l'autre. Il s'agit du type de valeur.

Ensuite, regardez le type de référence :

var obj_i, obj_ii = { name: 'issax' };
obj_i = obj_ii;
obj_i['career'] = 'coder';
console.log(obj_i);  //Object {name: "issax", career: "coder"}
console.log(obj_ii);  //Object {name: "issax", career: "coder"}
Copier après la connexion

Voir, après avoir attribué la valeur de obj_ii à obj_i, changer le contenu de obj_i modifiera également le contenu de obi_ii. taper. Le stockage des variables de type référence n'est pas le contenu lui-même, mais un pointeur vers le contenu. Oui, lorsque vous attribuez une valeur, vous attribuez simplement ce pointeur à une nouvelle variable. Ils pointent tous vers le même contenu. la situation n'est pas la même ? Cela va de soi.

Zhoucao, de quel gui je parle ? Je parle de copie profonde de objet [couvre-visage]

La copie peut être divisée en copie superficielle et copie profonde Copier , après avoir lu l'exemple ci-dessus, vous saurez probablement ce qu'est une copie superficielle et ce qu'est une copie profonde en y réfléchissant
Le processus d'affectation des types de valeur ordinaires est une copie profonde, tandis que l'affectation des types de référence est une copie superficielle.

Puisque l'objet est un type référence, son processus d'affectation normal est une copie superficielle. Cependant, parfois les objets doivent également être copiés en profondeur, qu'ai-je dit à propos de l'interface graphique ?

Par exemple, lorsque je travaillais sur Vue il y a deux jours, j'ai rencontré l'obligation de trier par nom. Le nombre impair de clics triera les éléments, et le nombre pair de clics restaurera le tri d'origine par nom. mise à jour heure. Ce n'est pas facile, il suffit de trier à chaque fois. C'est vraiment stupide de faire ça. Pensez-y. A part le premier tri, qui est significatif, le deuxième, le troisième, le quatrième, le cinquième, le sixième, le septième... à quoi ça sert ? les trier à chaque fois. Est-ce un gaspillage de performances ? Ensuite il est temps de stocker les objets triés...
Ensuite c'est gg, l'objet est un type référence, je l'ai assigné directement au début, et puis la scène était très gênante, les données ne bougeaient pas du tout [ couvre-visage];

Voulez-vous copier les attributs un par un de manière récursive  ? Alors mon objet ressemble à ceci :

Copie complète des objets JavaScript

Paste_Image.png

Tiens l'herbe, la vraie copie récursive c'est sb, heureusement j'ai pensé à c'est une bonne idée. Les types valeur sont copiés en profondeur. Ne s'agit-il pas simplement de convertir les types référence en types valeur ?

function deepCopy(sender){
  var temp = JSON.stringify(sender);
  return JSON.parse(temp);
}  
var obj_i, obj_ii = { name: 'issax' };
obj_i = deepCopy(obj_ii);
obj_i['career'] = 'coder';
console.log(obj_i);  //Object {name: "issax", career: "coder"}
console.log(obj_ii);  //Object {name: "issax"}
Copier après la connexion
Paste_Image.png

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!