Quote Originariamente inviata da KillerWorm Visualizza il messaggio
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.
Grazie davvero per la spiegazione chiara e coincisa.Sei stato molto gentile. . Adesso ho capito.