Uguaglianza di array e oggetti in JavaScript

Dec 13 2022
In JavaScript, il doppio segno di uguale (==) e il triplo segno di uguale (===) o uguaglianza rigorosa sono i due operatori utilizzati per verificare l'uguaglianza di due valori. Ricordiamo che il segno doppio uguale a differenza del segno triplo uguale controlla solo l'uguaglianza dei due valori ma non si preoccupa se sono dello stesso tipo.

In JavaScript, il doppio segno di uguale (==) e il triplo segno di uguale (===) o uguaglianza rigorosa sono i due operatori utilizzati per verificare l'uguaglianza di due valori. Ricordiamo che il segno doppio uguale a differenza del segno triplo uguale controlla solo l'uguaglianza dei due valori ma non si preoccupa se sono dello stesso tipo. Per esempio:

// double equality
const num = 2
const num2 = '2'
console.log(2==2)

// output will be true

// triple equality
const num = 2
const num2 = '2'
console.log(2===2)

// output will be false

Ma quando applichiamo uno di questi segni su un array o un oggetto, il comportamento diventa strano. Per esempio:

const obj1={
 name: 'kenneth',
country:'Nigeria',
age:26
}
const obj2={
 name: 'kenneth',
country:'Nigeria',
age:26
}
console.log(obj1 == obj2)
//this outputs false
console.log(obj1 === obj2)
// this still outputs false

Il motivo è che gli oggetti e le variabili di array non memorizzano direttamente i valori particolari loro assegnati, ma piuttosto memorizzano un riferimento alla posizione originale nella memoria in cui è memorizzato l'array o l'oggetto. Dai un'occhiata al diagramma qui sotto per una corretta comprensione:

Come possiamo vedere dall'immagine sopra, la variabile "obj1" memorizza il riferimento della memoria in cui è memorizzato l'oggetto reale, che in questo caso è 12456754 (ho inventato questo numero a scopo esplicativo) lo stesso con la variabile "obj2" che memorizza anche il riferimento della memoria in cui è memorizzato l'oggetto reale che è 98537562. Possiamo vedere che il valore obj1 stores(12456754) è diverso dal valore obj2 stores(98537562). Può essere scritto correttamente in questo modo:

const obj1 = 12456754;
const obj2 = 98537562;

L'unico modo in cui due oggetti o variabili di matrice possono essere uguali è solo se uguagliamo o assegniamo una nuova variabile (obj2) a una variabile di matrice o oggetto (obj1). Per esempio:

const obj1={
 name: 'kenneth',
country:'Nigeria',
age:26
}
const obj2 = obj1;

console.log(obj1 == obj2)
// this will output true
console.log(obj1 === obj2)
// this will still be true

NB: ho usato solo oggetti nei miei esempi, ma lo stesso motivo e la stessa spiegazione si applicano ancora agli array.