2010-10-15 5 views
0

Pourquoi les derniers opérateurs == et === reviennent-ils à true ici?Comparaison d'objets JavaScript

var object1 = {value: 10}; 
var object2 = object1; 
alert(object1 == object2); // result makes sense 

object2.otherValue = 15; 
alert(object1 == object2); // doesn't make intuitive sense to me 
alert(object1 === object2); // neither does this 
+1

Alerte que vous définissez 'object2.otherValue = 15;' Exécutez ce code 'alert (object1.otherValue);' – epascarello

Répondre

2

Sur la troisième ligne, vous définissez object1 et object2 de faire référence à le même objet. Il n'y a qu'un seul objet qui existe tout au long de votre programme.

Ainsi, l'affectation sur la ligne 5 modifie la valeur de cet objet unique; en d'autres termes, object1.otherValue === 15 est vrai après l'exécution de cette ligne, même si vous avez modifié l'objet par le biais d'une référence différente.

Par conséquent, pourquoi les vérifications d'égalité sont toujours vraies, car object1 est objet2, et bien sûr, il est égal à lui-même.

1

Lorsque vous attribuez un objet comme celui-ci:

var object2 = object1; 

vous affectez en fait une référence à l'objet. Il n'y a qu'un seul objet, maintenant avec deux références à celui-ci. Tous les changements sont visibles à travers l'une ou l'autre référence, car ils font référence à la même chose.

Si vous voulez créer une copie, ou cloner, de l'objet original, JavaScript n'a pas de manière intégrée de le faire. (Et écrire votre propre n'est pas trivial, et a été discuté sur débordement de pile à plusieurs reprises: https://stackoverflow.com/search?q=javascript+clone+object)

0

Lorsque vous faites var object2 = object1;, vous ne créez pas une copie de object1, vous créez une référence à celui-ci. object2 fait maintenant référence au même morceau de mémoire que object1. Par conséquent, toutes les modifications que vous apportez à l'une ou à l'autre seront répercutées dans l'autre.