Articolo originale: JavaScript If-Else and If-Then – JS Conditional Statements
Ci saranno occasioni in cui avrai bisogno di scrivere comandi che gestiscono decisioni diverse nel tuo codice.
Per esempio, se stai creando un bot, puoi fare in modo che risponda con messaggi differenti in base ai comandi che può ricevere.
In questo articolo spiegherò cos'è un'istruzione if...else
con esempi di codice. Ci occuperemo anche dell'operatore condizionale ternario, che può essere utilizzato come abbreviazione delle istruzioni if...else
.
Cos'è un'istruzione if...else in JavaScript?
L'if...else
è un tipo di istruzione condizionale (conditional statement), che esegue un blocco di codice quando la condizione contenuta nell'istruzione if
è truthy
(vera). Se la condizione è falsy
(falsa), allora sarà il blocco else
ad essere eseguito.
I valori truthy
e falsy
vengono convertiti in true
(vero) o false
(falso) nelle istruzioni if
.
if (condizione) {
// codice eseguito se la condizione è vera
} else {
// codice eseguito se la condizione è falsa
}
Qualunque valore che non è definito falsy
, verrà considerato truthy
in JavaScript.
Ecco una lista di valori falsy
:
false
0
(zero)-0
(zero negativo)0n
(BigInt zero)""
,''
,``
(stringa vuota)null
undefined
NaN
(not a number)
Esempi di istruzioni if...else in JavaScript
In questo esempio, la condizione nell'istruzione if
è true
, quindi il messaggio che verrà mostrato nella console sarà "Nick is an adult".
const age = 18;
if (age >= 18) {
console.log("Nick is an adult.");
} else {
console.log("Nick is a child.");
}

Ma se cambio la variabile age
in modo che sia minore di 18, allora la condizione diventerà false
, quindi il codice questa volta eseguirà il blocco else
.
const age = 12;
if (age >= 18) {
console.log("Nick is an adult.");
} else {
console.log("Nick is a child.");
}

Esempi con varie condizioni (istruzioni if...else if...else) in JavaScript
A volte potresti voler testare varie condizioni, e in questi casi entra in gioco il blocco else if
.
if (condizione 1) {
// codice eseguito quando condizione 1 è true
} else if (condizione 2) {
// codice eseguito quando condizione 2 è true
} else {
// codice eseguito quando nessuna delle condizioni precedenti è true
}
Quando la condizione dell'if
è false
, il computer valuta la condizione dell'else if
. Se anche questa risulta false
, allora passa al blocco else
.
In questo esempio, il blocco else if
sarà quello che verrà eseguito, dato che Alice ha un'età compresa tra 18 e 21 anni.
const age = 18;
if (age < 18) {
console.log("Alice is under 18 years old.");
} else if (age >= 18 && age <= 21) {
console.log("Alice is between the ages of 18 and 21.");
} else {
console.log("Alice is over 21 years old.");
}

Quando utilizzare le istruzioni switch invece che le istruzionii if...else?
Ci sono occasioni in JavaScript in cui potresti considerare di utilizzare un'istruzione switch
, invece di un'istruzione if else
.
Le istruzioni switch
hanno una sintassi più pulita, a differenza delle complicate istruzioni if else
.
Dai un'occhiata a questo esempio in basso – invece di utilizzare questa lunga istruzione if else
, potresti scegliere di servirti di un'istruzione switch
, che è molto più semplice da leggere.
const pet = "dog";
if (pet === "lizard") {
console.log("I own a lizard");
} else if (pet === "dog") {
console.log("I own a dog");
} else if (pet === "cat") {
console.log("I own a cat");
} else if (pet === "snake") {
console.log("I own a snake");
} else if (pet === "parrot") {
console.log("I own a parrot");
} else {
console.log("I don't own a pet");
}
const pet = "dog";
switch (pet) {
case "lizard":
console.log("I own a lizard");
break;
case "dog":
console.log("I own a dog");
break;
case "cat":
console.log("I own a cat");
break;
case "snake":
console.log("I own a snake");
break;
case "parrot":
console.log("I own a parrot");
break;
default:
console.log("I don't own a pet");
break;
}
Le istruzioni switch
non sono sempre la scelta più appropriata in tutte le situazioni, ma se pensi delle istruzioni if else
siano troppo lunghe e complicate, allora un'istruzione switch
potrebbe essere un'opzione alternativa.
L'operatore logico AND (&&) e le istruzioni if...else in JavaScript
Con l'operatore logico AND (&&
), se entrambe le condizioni sono true
, allora verrà eseguito il blocco if
. Se una o entrambe le condizioni sono false
, allora sarà eseguito il blocco else
.
In questo esempio, dato che l'età è maggiore di 16 e la variabile ownsCar
è true
, verrà eseguito il blocco if
. Il messaggio mostrato dalla console sarà "Jerry is old enough to drive and has his own car."
const age = 17;
const ownsCar = true;
if (age >= 16 && ownsCar) {
console.log("Jerry is old enough to drive and has his own car.");
} else {
console.log("Jerry does not drive.");
}

Cambiando la variabile age
in modo che sia minore di 16, entrambe le condizioni non sono più true
e quindi verrà eseguito il blocco else
.
const age = 13;
const ownsCar = true;
if (age >= 16 && ownsCar) {
console.log("Jerry is old enough to drive and has his own car.");
} else {
console.log("Jerry does not drive.");
}

L'operatore logico OR (||) e le istruzioni if...else in JavaScript
Nel caso dell'operatore logico OR (||
), se una o entrambe le condizioni sono true
, allora il codice nell'istruzione if
sarà eseguito.
In questo esempio, anche se la variabile isSale
è false
, il codice nel blocco if
verrà eseguito lo stesso, perché almeno la variabile boyfriendIsPaying
è true
.
const boyfriendIsPaying = true;
const isSale = false;
if (boyfriendIsPaying || isSale) {
console.log("Jesse will go shopping.");
} else {
console.log("Jesse will not go shopping.");
}

Se cambiassi il valore della variabile boyfriendIsPaying
in false
, allora il blocco else
verrebbe eseguito, perché entrambe le condizioni sarebbero false
.
const boyfriendIsPaying = false;
const isSale = false;
if (boyfriendIsPaying || isSale) {
console.log("Jesse will go shopping.");
} else {
console.log("Jesse will not go shopping.");
}

L'operatore logico NOT (!) e le istruzioni if...else in JavaScript
L'operatore logico NOT (!
) cambia il valore di qualcosa da true
a false
, ma può anche fare il contrario, trasformandolo da false
a true
.
Possiamo modificare l'esempio precedente utilizzando l'operatore !
, per rendere false
la variabile boyfriendIsPaying
. Dato che entrambe le condizioni adesso sono false
, il blocco else
verrà eseguito.
const boyfriendIsPaying = true;
const isSale = false;
if (!boyfriendIsPaying || isSale) {
console.log("Jesse will go shopping.");
} else {
console.log("Jesse will not go shopping.");
}

L'operatore condizionale (ternario) in JavaScript
Se stai utilizzando un'istruzione if else
breve, potresti scegliere di servirti dell'operatore ternario.
Questa è la sintassi di base dell'operatore ternario:
condizione ? se condizione è true : se condizione è false
La condizione è posizionata prima del simbolo ?
e se è true
, allora il codice tra il simbolo ?
ed il simbolo :
verrà eseguito. Se la condizione è false
, allora sarà il codice dopo il simbolo :
ad essere eseguito.
In questo esempio, dato che l'età è maggiore di 18, il messaggio mostrato dalla console sarà "Can vote".
const age = 32;
const citizen = age >= 18 ? "Can vote" : "Cannot vote";
console.log(citizen);

Questo è invece lo stesso codice, ma scritto usando un'istruzione if else
:
const age = 32;
let citizen;
if (age >= 18) {
citizen = "Can vote";
} else {
citizen = "Cannot vote";
}
console.log(citizen);
In conclusione
Le istruzioni if else
eseguono un blocco di codice se la condizione nell'istruzione if
è truthy
. Se la condizione è falsy
, allora sarà il blocco else
ad essere eseguito.
Ci saranno occasioni in cui vorrai testare varie condizioni, e in questi casi potrai utilizzare le istruzioni if...else if...else
.
Se pensi che un'istruzione if else
sia lunga e complicata, allora c'è la possibilità di utilizzare un'istruzione switch
come alternativa.
Utilizzare gli operatori logici per testare più di una condizione, può essere un'alternativa alle istruzioni if else
annidate l'una nell'altra.
L'operatore ternario può essere utilizzato come metodo per scrivere un'istruzione if else
in modo più sintetico.