Operatori di uguaglianza ECMAScript

Determinare se due variabili sono uguali è un'operazione molto importante nel design del programma. Quando si tratta di valori originali, questa operazione è abbastanza semplice, ma quando si tratta di oggetti, la cosa diventa un po' più complessa.

ECMAScript fornisce due insiemi di operatori di uguaglianza: uguaglianza e disuguaglianza per gestire i valori originali, e uguaglianza e disuguaglianza completa per gestire gli oggetti.

Uguaglianza e disuguaglianza

In ECMAScript, l'operatore di uguaglianza è rappresentato da due virgole (==), che restituisce true solo quando entrambi gli operandi sono uguali. L'operatore di disuguaglianza è rappresentato da un segno di exclamazione più un trattino (!=), che restituisce true solo quando entrambi gli operandi sono diversi. Per determinare se due operandi sono uguali, entrambi gli operatori eseguono la conversione di tipo.

Le regole per eseguire la conversione di tipo sono le seguenti:

  • Se uno degli operandi è un valore Booleano, prima di controllare l'uguaglianza, lo si converte in valore numerico. false viene convertito in 0, true in 1.
  • Se uno degli operandi è una stringa e l'altro è un numero, prima di controllare l'uguaglianza, si tenta di convertire la stringa in un numero.
  • Se uno degli operandi è un oggetto e l'altro è una stringa, prima di controllare l'uguaglianza, si tenta di convertire l'oggetto in una stringa.
  • Se uno degli operandi è un oggetto e l'altro è un numero, prima di controllare l'uguaglianza, si tenta di convertire l'oggetto in un numero.

Durante il confronto, l'operatore segue anche le seguenti regole:

  • Il valore null e undefined sono uguali.
  • Non è possibile convertire null e undefined in altri valori durante il controllo dell'uguaglianza.
  • Se uno degli operandi è NaN, l'operatore di uguaglianza restituirà false, mentre l'operatore di disuguaglianza restituirà true.
  • Se entrambi gli operandi sono oggetti, viene confrontata la loro riferimento. Se entrambi gli operandi si riferiscono allo stesso oggetto, l'operatore di uguaglianza restituisce true, altrimenti gli operandi non sono uguali.

Suggerimento importante:Anche se entrambi i numeri sono NaN, l'operatore di uguaglianza restituisce false, poiché secondo le regole, NaN non è uguale a NaN.

La seguente tabella elenca alcune eccezioni speciali e i loro risultati:

espressione valore
null == undefined true
"NaN" == NaN false
5 == NaN false
NaN == NaN false
NaN != NaN true
false == 0 true
true == 1 true
true == 2 false
undefined == 0 false
null == 0 false
"5" == 5 true

Uguaglianza completa e non completa

I simili operatori di uguaglianza e non uguaglianza sono l'uguaglianza completa e non completa. Questi operatori fanno la stessa cosa dell'uguaglianza e del non uguaglianza, ma non eseguono conversione di tipo prima di controllare l'uguaglianza.

Il segno di uguaglianza completo è rappresentato da tre trattini di uguaglianza (===), e restituisce true solo quando i operandi sono uguali senza conversione di tipo.

Ad esempio:

var sNum = "66";
var iNum = 66;
alert(sNum == iNum); // Output "true"
alert(sNum === iNum); // Output "false"

In questo codice, il primo alert utilizza l'uguaglianza per confrontare la stringa "66" con il numero 66, output "true". Come menzionato in precedenza, questo è perché la stringa "66" viene convertita in numero 66, quindi viene confrontata con un altro numero 66. Il secondo alert utilizza l'uguaglianza completa senza conversione di tipo per confrontare una stringa e un numero, naturalmente, la stringa non è uguale al numero, quindi l'output è "false".

Il segno di non uguaglianza completo è rappresentato da un'apice e due trattini di uguaglianza (!==), e restituisce true solo quando i operandi non richiedono conversione di tipo e sono diversi.

Ad esempio:

var sNum = "66";
var iNum = 66;
alert(sNum != iNum); // Output "false"
alert(sNum !== iNum); // Output "true"

Qui, il primo alert utilizza il segno di non uguaglianza per convertire la stringa "66" in numero 66, rendendola uguale al secondo operando 66. Pertanto, il risultato del calcolo è "false", perché i due operandi sono uguali. Il secondo alert utilizza il segno di non uguaglianza completo. L'operazione chiede: "sNum" è diverso da "iNum"? La risposta a questa domanda è: sì (true), perché sNum è una stringa e iNum è un numero, ovviamente diversi.