2014-12-18 7 views

risposta

26

Come indicato sul MDN's Logical Operators page, il && dell'operatore:

Restituisce expr1 se può essere convertito in false; in caso contrario, restituisce expr2. Pertanto, se utilizzato con valori booleani, && restituisce true se entrambi gli operandi sono veri; in caso contrario, restituisce false.

Nel tuo caso, expr1 (anotherVar == 50) è vera (non false), quindi ritorna expr2 (someVar), che è 25.

Non restituisce true o false perché expr2 non è un valore booleano.

Le ECMA-262 Specification note:

Il valore prodotto da un && o || operatore non è necessariamente di tipo booleana. Il valore prodotto sarà sempre il valore di una delle due espressioni di operando.

+0

potrebbe usare '!!' (anotherVar == 50 && !! someVar) // true –

+3

Questo è, a proposito, perché a volte si vedono i valori predefiniti come 'arg1 = arg1 || "default"; '(finché i valori di falsi-y (come' null' e così via) non sono valori validi) – Izkata

Problemi correlati