Perché due oggetti con gli stessi valori non sono uguali?

Ho eseguito quanto segue in console perché l'output è falso. Non chiedendo come confrontare due oggetti, ma perché questi due oggetti non sono uguali.

> a = {same:'same'} Object {same: "same"} > b = {same:'same'} Object {same: "same"} > a === b false > a == b false 

Due oggetti non sono mai uguali anche se hanno lo stesso contenuto, poiché due diverse istanze di Object non sono mai uguali.

Quando si confrontano due oggetti, JavaScript confronta i riferimenti interni che sono uguali solo quando entrambi gli operandi si riferiscono allo stesso object nella memory, i tasti e i valori non vengono selezionati, quindi il contenuto dell'object non ha importnza e gli operandi devono riferirsi entrambi object di restituire vero in un confronto.

Ciò è dovuto semplicemente a come si definisce == per l' Algoritmo di confronto tra parità di parità :

1. Se il tipo (x) è uguale a Tipo (y) [ie Tipo (x) == Tipo (y) == Oggetto], quindi ..

1.f. Restituisci true se x e y si riferiscono allo stesso object . Altrimenti, restituisci falso.

Nessuna delle altre regole / conversioni si applica perché entrambi gli operandi sono Oggetti.

Sebbene non esista un supporto "core" di ECMAScript 5a edizione per questo task, vengono discusse diverse soluzioni in Come determinare l'uguaglianza per due oggetti JavaScript?


Ciò non ha niente a che fare con "riferimenti", che sono un dettaglio di implementazione non definito in ECMAScript e possono essere interamente discussi per le regole di cui sopra: due Oggetti diversi non sono mai uguali per regole == (e per estensione === ).

Stai confrontando due oggetti mai uguali. Se si confrontano a.same e b.same allora saranno uguali.