Articolo originale: JavaScript Triple Equals Sign VS Double Equals Sign – Comparison Operators Explained with Examples

Probabilmente, in JavaScript hai visto dei segni di uguale doppi e tripli. Ma che cosa significano?

In breve: == effettua implicitamente una conversione di tipo e === non converte il tipo.

Il doppio uguale (==) verifica soltanto l'uguaglianza dei valori. Effettua implicitamente una conversione di tipo (type coercion). Questo vuol dire che prima di confrontare i valori, converte i tipi delle variabili in modo che corrispondano.

Al contrario, il triplo uguale (===) non effettua conversioni di tipo. Verifica se le variabili confrontate hanno lo stesso valore e sono dello stesso tipo.

Ok – proviamo a comprendere meglio la differenza con alcuni esempi. Cerca di capire quale sarà l'output di ognuno.

Esempio 1:

const foo = "test" 
const bar = "test"  

console.log(foo == bar) //true
console.log(foo === bar) //true                            

Il valore e il tipo di foo e bar sono uguali. Di conseguenza il risultato è true per entrambi.

Esempio 2:‌

const number = 1234 
const stringNumber = '1234'  

console.log(number == stringNumber) //true
console.log(number === stringNumber)  //false                                   

Il valore di number e di stringNumber sembra lo stesso. Tuttavia, il tipo di number è number e il tipo di stringNumber è string. Anche se i valori sono gli stessi, non lo è il tipo. Dunque il confronto tramite == restituisce true, ma quando il confronto avviene per il valore e il tipo, il risultato è false.

Esempio 3:

console.log(0 == false) //true
console.log(0 === false) //false                  

Spiegazione: stesso valore, tipo diverso. Conversione di tipo.

Questo è un caso interessante. Il valore 0 se confrontato con false risulta uguale. Ciò avviene perché 0 e false hanno lo stesso valore per JavaScript, ma se confrontati per valore e tipo, il risultato è falso perché 0 è di tipo number e false è di tipo boolean.

Esempio 4:

const str = ""

console.log(str == false) //true
console.log(str === false) //false

Il valore di una stringa vuota e false sono uguali in JavaScript. Quindi, == restituisce true. Tuttavia il loro tipo è diverso e quindi === restituisce false.

Quando dovresti usare == e quando ===?

Se hai dubbi, utilizza ===. Ti eviterà un sacco di potenziali bug.

Se ti trovi in un caso di utilizzo in cui puoi essere tollerante riguardo al tipo di dato in entrata, allora usa ==. Ad esempio, se una API accetta sia "true" che true dal client, usa ==. In breve, non usare == a meno che non ci sia una ragione per farlo.

Ecco un'utile tabella della verità come riferimento, in cui puoi vedere quanto è complicata l'uguaglianza in JavaScript:

image-6
Source: https://dorey.github.io/JavaScript-Equality-Table/

Se ti è piaciuto questo articolo, seguimi su twitter per altri contenuti.