Operatori di confronto

Gli operatori di confronto confrontano i valori di due operandi e valutano se l'istruzione che formano è true o false. L'esempio seguente utilizza l'operatore di uguaglianza rigida (===) 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 del tipo

Due degli operatori di confronto più utilizzati sono == per uguaglianza debole e === per uguaglianza rigorosa. == esegue un confronto ampio tra due valori forzando gli operandi a tipi di dati corrispondenti, se possibile. Ad esempio, 2 == "2" restituisce true, anche se viene effettuato il confronto 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 leggermente uguali.

2 != 3
> true

2 != "2"
> false

I confronti rigorosi utilizzando === o !== non eseguono la coercizione dei tipi. Affinché un confronto rigoroso venga valutato con 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 === quando possibile.

Operatore Descrizione Utilizzo Risultato
=== Strettamente uguale 2 === 2 true
!== Non strettamente uguale 2 !== "2" true
== Uguale (o "assolutamente uguale") 2 == "2" true
!= Diverso da 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

Verità e falsificazione

Tutti i valori in JavaScript sono implicitamente true o false e possono essere forzati al valore booleano corrispondente, ad esempio utilizzando il confronto "assolutamente uguale". Un insieme limitato di valori costringe a false:

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

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

"My string" == true
> true

100 == true
> true

0 == true
> false

Operatori logici

Utilizza gli operatori logici AND (&&), OR (||) e NOT (!) 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 veritiero o falso di un operando, valutando in true se l'operando restituisce false e false se l'operando restituisce true:


true
> true

!true
> false

!false
> true

Se utilizzi l'operatore logico NOT (!) davanti a un altro tipo di dati, come un numero o una stringa, questo valore viene forzato in un valore booleano e viene invertito il valore reale o falso del risultato.

"string"
> "string"

!"string"
> false

0
> 0

!0
> true

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

!!"string"
> true

!!0
> false

Gli operatori logici AND e OR non eseguono coercizioni indipendenti. Restituisce il valore di uno dei due operandi valutati, con l'operando scelto determinato da questa valutazione.

L'operatore AND logico (&&) restituisce il primo dei due operandi solo se restituisce false e il secondo operando in caso contrario. Nei confronti che valutano in base a valori booleani, restituisce true solo se gli operandi su entrambi i lati dell'operatore logico AND hanno valore true. Se una delle parti restituisce false, restituisce 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 invariato se può essere forzato a false. Se il primo operando può essere forzato a 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 logico OR (||) restituisce il primo dei due operando solo se restituisce true e il secondo operando in caso contrario. Nei confronti che valutano in base a valori booleani, questo significa che viene restituito true se uno o più degli operandi valuta in true, mentre se nessuno dei due lati restituisce true, restituisce false:

true || false
> true

false || true
> true

true || true
> true

false || false
> false

Quando utilizzi || con due operandi non booleani, restituisce il primo operando invariato se potrebbe essere forzato a true. Se il primo operando può essere forzato a 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 coalescenza nullish

Introdotto in ES2020, l'"operatore di coalezione null" (??) restituisce il primo operando solo se questo 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 all'operatore logico OR, ma è più restrittivo per quanto riguarda la valutazione del primo operando. || restituisce il secondo operando per qualsiasi espressione che può essere forzata in false, inclusi undefined e null. ?? restituisce il secondo operando quando il primo operando è diverso da 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 veritiero o falso della variabile.

L'operatore di assegnazione logico AND (&&=) valuta il secondo operando e assegna al primo operando solo se il primo operando restituisce 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 veritiero o falso del primo operando determina se l'assegnazione viene eseguita. 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 logico OR (||=) valuta il secondo operando e assegna al primo operando se il primo operando è false, in pratica "se il primo operando è falso, assegnagli invece il valore del secondo operando:"

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

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

Verifica le tue conoscenze

Quale operatore indica "strettamente uguale"?

===
==
=
!=