Operatori di confronto

Gli operatori di confronto confrontano i valori di due operandi e valutano se l'affermazione che formano è true o false. L'esempio seguente utilizza l'operatore di uguaglianza rigorosa (===) per confrontare due operandi: l'espressione 2 + 2 e il valore 4. Poiché il risultato dell'espressione e il valore numerico 4 sono uguali, questa espressione restituisce true:

2 + 2 === 4
> true

Coercizione e uguaglianza di tipo

Due degli operatori di confronto più utilizzati sono == per l'uguaglianza approssimativa e === per l'uguaglianza rigorosa. == esegue un confronto approssimativo tra due valori forzando gli operandi a tipi di dati corrispondenti, se possibile. Ad esempio, 2 == "2" restituisce true, anche se il confronto viene eseguito tra un valore numerico e un valore stringa.

2 == 2
> true

2 == "2"
> true

Lo stesso vale per !=, che restituisce true solo se gli operandi confrontati non sono approssimativamente uguali.

2 != 3
> true

2 != "2"
> false

I confronti rigorosi che utilizzano === o !== non eseguono la coercizione di tipo. Affinché un confronto rigoroso restituisca il valore true, i valori confrontati devono avere lo stesso tipo di dati. Per questo motivo, 2 == "2" restituisce true, ma 2 === "2" restituisce false:

2 === 3
> false

2 === "2"
> false

Per rimuovere qualsiasi ambiguità che potrebbe derivare dalla coercizione automatica, utilizza === se possibile.

Operatore Descrizione Utilizzo Risultato
=== Esattamente uguale 2 === 2 true
!== Non strettamente uguale 2 !== "2" true
== Uguale (o "approssimativamente uguale") 2 == "2" true
!= Non uguale 2 != "3" true
> Maggiore di 3 > 2 true
>= Maggiore o uguale a 2 >= 2 true
< Minore di 2 < 3 true
<= Minore o uguale a 2 <= 3 true

Valori veri e falsi

Tutti i valori in JavaScript sono implicitamente true o false e possono essere forzati al valore booleano corrispondente, ad esempio utilizzando il comparatore "approssimativamente uguale". Un insieme limitato di valori viene forzato su false:

  • 0
  • null
  • undefined
  • NaN
  • Una stringa vuota ("")

Tutti gli altri valori vengono forzati a true, incluse le stringhe contenenti uno o più caratteri e tutti i numeri diversi da zero. Questi valori sono comunemente chiamati valori "veri" e "falsi".

"My string" == true
> true

100 == true
> true

0 == true
> false

Operatori logici

Utilizza gli operatori AND (&&), OR (||) e NOT (!) logici per controllare il flusso di uno script in base alla valutazione di due o più istruzioni condizionali:


2 === 3 || 5 === 5;
> true

2 === 2 && 2 === "2"
> false

2 === 2 && !"My string."
> false

Un'espressione logica NOT (!) nega il valore vero o falso di un operando, restituendo true se l'operando restituisce false e false se l'operando restituisce true:


true
> true

!true
> false

!false
> true

L'utilizzo dell'operatore logico NON (!) davanti a un altro tipo di dati, ad esempio un numero o una stringa, forza il valore in un booleano e inverte il valore vero o falso del risultato.

"string"
> "string"

!"string"
> false

0
> 0

!0
> true

È prassi comune utilizzare due operatori NOT per forzare rapidamente i dati al valore booleano corrispondente:

!!"string"
> true

!!0
> false

Gli operatori AND e OR logici non eseguono alcuna coercizione da soli. Rimontano il valore di uno dei due operandi in fase di valutazione, con l'operando scelto determinato da questa valutazione.

L'operatore AND logico (&&) restituisce il primo dei due operandi solo se questo viene valutato come false e, in caso contrario, il secondo operando. Nei confronti che si valutano in valori booleani, restituisce true solo se gli operandi su entrambi i lati dell'operatore AND logico si valutano in true. Se uno dei lati restituisce false, viene visualizzato false.

true && false
> false

false && true
> false

false && false
> false

true && true
> true

Quando && viene utilizzato con due operandi non booleani, il primo operando viene restituito immutato se può essere forzato in false. Se il primo operando può essere forzato in true, il secondo operando viene restituito invariato:

false && "My string"
> false

null && "My string"
> null

"My string" && false
> false

"My string" && "My second string"
> "My second string"

2 === 2 && "My string"
> "My string"

L'operatore OR logico (||) restituisce il primo dei due operandi solo se questo viene valutato come true e, in caso contrario, il secondo operando. Nei confronti che risultano in valori booleani, significa che restituisce true se uno degli operandi risulta in true e, se nessuno dei due operandi risulta in true, restituisce false:

true || false
> true

false || true
> true

true || true
> true

false || false
> false

Quando viene utilizzato || con due operandi non booleani, viene restituito il primo operando immutato se può essere forzato in true. Se il primo operando può essere forzato in false, il secondo operando viene restituito invariato:

false || "My string"
> "My string"

null || "My string"
> "My string"

"My string" || false
> "My string"

"My string" || "My second string"
> "My string"

2 === 2 || "My string"
> true

Operatore di unione di valori null

Introdotto in ES2020, l'"operatore di unione nullo" (??) restituisce il primo operando solo se questo operando ha un valore diverso da null o undefined. In caso contrario, restituisce il secondo operando.

null ?? "My string"
> "My string"

undefined ?? "My string"
> "My string"

true ?? "My string";
> true

?? è simile a un OR logico, ma più rigoroso nel modo in cui viene valutato il primo operando. || restituisce il secondo operando per qualsiasi espressione che può essere coercita in false, inclusi undefined e null. ?? restituisce il secondo operando solo quando il primo è strettamente uguale a null o undefined, anche se potrebbe essere forzato a false:

0 ?? "My string";
> 0

false ?? "My string";
> false

undefined ?? "My string";
> "My string"

Operatori di assegnazione logica

Utilizza gli operatori di assegnazione per assegnare il valore di un secondo operatore a un primo operatore. L'esempio più comune è un singolo segno di uguale (=), utilizzato per assegnare un valore a una variabile dichiarata.

Utilizza gli operatori di assegnazione logica per assegnare in modo condizionale un valore a una variabile in base al valore vero o falso della variabile.

L'operatore di assegnazione AND logico (&&=) valuta il secondo operando e lo assegna al primo solo se il primo operando ha valore true. In pratica, "se il primo operando è vero, assegnagli il valore del secondo operando".

let myVariable = false;
myVariable &&= 2 + 2;
> false

myVariable = true;
myVariable &&= 2 + 2;
> 4

Il valore vero o falso del primo operando determina se viene eseguita un'assegnazione. Tuttavia, il tentativo di valutare il primo operando utilizzando un operatore di confronto genera un valore booleano true o false, a cui non è possibile assegnare un valore:

let myVariable = 5;
myVariable > 2 &&= "My string"
> SyntaxError: Invalid left-hand side in assignment

L'operatore di assegnazione OR logico (||=) valuta il secondo operando e lo assegna al primo se il primo operando ha valore false, ovvero "se il primo operando è falso, assegnagli il valore del secondo operando".

let myVariable = false;
myVariable ||= 2 + 2;
> 4

myVariable = true;
myVariable ||= 2 + 2;
> true

Verificare di aver compreso

Quale operatore indica "rigorosamente uguale"?

===
==
=
!=