Originariamente inviata da
KillerWorm
Ciao, in linea di massima l'interprete JavaScript per gli operatori logici "esegue" (e quindi valuta) il valore di ogni singolo membro dell'espressione da sinistra a destra, quindi esce dalla serie di verifiche non appena il risultato dell'espressione è stabilito; a quel punto restituisce il valore dell'ultimo membro eseguito, quello che rende inequivocabile il risultato.
Prendiamo il tuo primo caso:
codice:
console.log(4 && true); // output: true
L'operatore è un AND logico per cui, per stabilire il valore del risultato, entrambi i membri devono avere un valore equivalente a
true.
L'omino JS esegue il controllo sul primo membro,
4, e stabilisce che equivale a
true; siccome dopo c'è un operatore logico AND (&&), ha bisogno che anche il successivo membro sia equivalenti a
true per poter capire se è possibile proseguire con la valutazione dell'espressione ed ottenere quindi un risultato certo. Per cui passa al controllo del secondo membro
true; ora il risultato è chiaro (anche perché l'espressione è terminata; non c'è altro da controllare), quindi esce dalla serie di verifiche restituendo
true, cioè il valore dell'ultimo membro "eseguito".
Prendiamo il secondo caso:
codice:
console.log(0 && true); // output: 0
L'omino JS esamina il primo membro,
0, e stabilisce che è uguale a
false (ai fini della valutazione logica); dal momento che l'espressione prosegue con &&, col primo valore
false il risultato dell'espressione è già stabilito; quindi l'esecuzione dell'espressione si interrompe restituendo il valore
0.
Poniamo un altro esempio:
codice:
console.log(1 && "" && true); // output: ""
Ora, in termini logici:
1 equivale a
true
"" (stringa vuota) equivale a
false
true equivale chiaramente a
true
L'omino JS esegue il valore
1, vedendo che dopo c'è un && quel valore non gli basta per stabilire il risultato dell'intera espressione; esegue quindi il valore "" (
false); in questo caso, vedendo che dopo c'è un &&, il risultato è stabilito perché per poter proseguire con la valutazione sarebbe necessario che anche quel valore sia
true; l'esecuzione quindi termina qui e viene restituito il valore "" (stringa vuota).
Ovviamente lo stesso procedimento viene usato per tutti gli altri operatori logici.
Ad esempio con || (operatore logico OR):
codice:
console.log(1 || false); // output: 1
console.log(0 || false); // output: false
L'operatore || richiede che almeno uno tra i due membri abbia un valore equivalente a
true perché l'espressione sia vera; altrimenti sarà falsa;
Nel primo caso il primo membro eseguito è sufficiente per stabilire il risultato, quindi viene restituito il relativo valore
1; mentre nel secondo caso, il primo valore non è sufficiente, per cui viene eseguito (e restituito) il secondo,
false, che determina il risultato.