32 votes

Comparaison d'objets en JavaScript

J'ai ce code :

var object1 = {same:'test'}
var object2 = {same:'test'};       
console.log(object1 === object2)

Il retourne faux dans la console.

J'ai aussi ce code :

var object1 = {same:'test'}
var object2 = object1;
console.log(object1 === object2)  

Il retourne vrai dans la console.

Je sais que "===" est un opérateur d'égalité, mais je ne sais pas comment il fonctionne sur les objets.

Pourquoi le premier exemple renvoie-t-il un résultat faux ?

82voto

Niet the Dark Absol Points 154811

Tu vois ce ballon ? Elle est de couleur rouge. Appelez-la boule 1.

Tu vois ce ballon ? Elle est de couleur rouge. Appelez-la boule 2.

La boule 1 est-elle le même objet que la boule 2 ? Non, ce sont des objets distincts qui ont des propriétés identiques.


Tu vois cette balle ? Elle est de couleur rouge. Appelez-la boule 1.

Appelons la boule 1, la boule 2.

La boule 1 est-elle le même objet que la boule 2 ? Oui. Elles sont la même balle.

36voto

knittl Points 64110

Les objets sont comparés par égalité de référence, et puisque object1 et object2 sont deux instances distinctes, ce sont des objets différents (pensez-y comme : ils occupent des places différentes dans la mémoire).

Cependant, si vous assignez l'objet 1 à l'objet 2, ils pointent tous deux au même endroit dans la mémoire et sont donc égaux (ce sont deux références au même objet unique, qui n'existe qu'une fois dans la mémoire). Modifier une propriété par object1.same = 'uiae'; mettra à jour la propriété object2.same également (car il s'agit en fait du même objet identique et de la même propriété)

9voto

Srinu Points 307
var object1 ={same:'test'}
var object2 ={same:'test'};       
console.log(object1 === object2)

Dans ce cas, vous créez deux objets différents. C'est pourquoi il retourne faux dans la console lors de la vérification avec \=== opérateur.

var object1 ={same:'test'}
var object2 =object1;
console.log(object1 === object2)

Dans ce cas, vous créez un objet et object1 & object2 font référence à l'objet créé, c'est pourquoi il renvoie true quand vous vérifiez avec \=== opérateur.

Dans le deuxième cas, si nous changeons le object2["same"]="test2" alors la valeur de object1["same"] sera également modifiée en test2 .

Dans le premier cas, ça ne se passera pas comme ça, parce que Objet 1 & objet2 sont deux objets différents.

référez-vous à ça : Égalité des objets en JavaScript

J'espère que cela pourra vous être utile.

6voto

unikorn Points 3986

Dans le premier cas, Object1 et Object2 sont deux points de référence (ou variables) différents qui pointent vers deux objets différents en mémoire, donc lorsque vous vérifiez leur égalité, le résultat est faux.

Dans le second cas, vous ne faites que copier le point de référence (adresse) de l'objet 1 à l'objet 2, ce qui signifie que les deux points de référence font maintenant référence au même objet en mémoire.

Les objets sont toujours comparés par référence.

4voto

Barmar Points 135986

Lorsque vous affectez des objets ou des tableaux d'une variable à une autre, une référence à l'objet original est copiée, de sorte que les deux objets sont égaux.

Chaque fois que vous écrivez un littéral d'objet ou de tableau, il crée un objet ou un tableau différent. Ils ne sont donc pas égaux, même si leur contenu est similaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X