0
votes

Comment les références du même objet ne peuvent pas être égales?

EG.:

let userOne = {
  name: "Test",
  surname: "Test surname",
  sizes: {
    width: 200,
    height: 200,
  }
}

let userTwo = {
  ...userOne
}
userTwo.sizes.width = 50;

alert(userOne.sizes.width); // 50


2 commentaires

Ce sont deux objets différents. La comparaison d'objet n'implique pas les propriétés ou les valeurs de propriété.


Le simple fait qu'ils ont chacun leur propre {} comme valeur signifie qu'ils ne sont pas la même référence d'objet du tout et chacun est un nouvel objet. {}! == {}


4 Réponses :


1
votes

Ils ne sont pas forts> le même objet.

Vous avez deux objets différents, mais le second a les propriétés em> de la première copie avec Screenc Syntaxe . P>

Il serait plus clair de démontrer si plus de propriétés étaient plus claires Inclus dans le deuxième objet. p>

p>

let userOne = {
  name: "Test",
  surname: "Test"
}

let userTwo = { ...userOne,
  yearOfBirth: 2000
};

console.log({
  userOne
});
console.log({
  userTwo
});


0 commentaires

2
votes

Parce que tes ne sont pas des références du même objet! Ce sont deux objets qui (superficiellement) ont l'air identique.

Pensez tout type de magasin, vous prenez un produit de l'étagère et il y a une douzaine de produits identiques derrière elle. Juste parce qu'ils ont l'air de la même chose ne les rendent pas le même article. P>

let usertwo = userone; code> crée une deuxième référence au même article. P>

let usertwo = {... userone} code> crée un nouvel objet et copie les propriétés qui sont propres forts> et énumérables forts> à ce nouvel objet. p>

Dans l'exemple précédent, il y a deux objets. Mais qu'en est-il de cela: p>

let userOne = {
 name: "Test",
 surname: "Test surname",
 sizes: {
   width: 200,
   height: 200,
 }
}

let userTwo = {
 ...userOne
}
userTwo.sizes.width = 50;

alert(userOne.sizes.width); // 50


0 commentaires

1
votes

L'opérateur ES6 Spread {... userone} , crée une copie de l'objet useroneOne et stockez-le dans un emplacement de mémoire différent qui est également égal à cela,

let usertwo = objet.Assign ({}, userone);

Mais si vous attribuez l'objet à un autre,

letterthree = useroneOne; Cela va retourner vrai.

Ce d'autre part, compare seulement les valeurs

useroneOne.name === usertwo.name de sorte qu'il renvoie vrai.


0 commentaires

0
votes

En raison de la logique que vous donnez dans une méthode égale (), par défaut, ils sont égaux.


1 commentaires

Cela ne fournit pas de réponse à la question. Une fois que vous avez suffisamment réputation , vous pourrez Commentaire sur n'importe quel message ; au lieu de, Fournir des réponses Cela n'exige pas de clarification de l'Asker . - de l'avis