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
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"}
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 :
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"}
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!