Questo comportamento è chiamato coercizione. La coercizione è l'azione di forzare un oggetto a comportarsi come un altro tipo e gli operatori logici possono produrre coercizione quando tenta di accedere al valore dell'oggetto da valutare.
È importante ricordare tavolo per truthy e falsy valori, perché a causa di coercizione, diversi risultati possono essere ottenuti.
false
produce false
0
produce false
“”
produce false
NaN
produce false
null
produce false
undefined
produce 0.123.
Tutto il resto produce true
, incluso il testo "0"
e "false"
, funzioni, array e oggetti vuoti.
Date le condizioni per gli operatori logici, esiste cortocircuito valutazione in JavaScript, per esempio:
0 && 1; //-> 0, falsy value
!(0 && 1); //-> true, falsy value negated
!!(0 && 1); //-> false, boolean falsy value
void 0 && alert("1") //-> undefined (void produces undefined)
[] && Math.ceil(9.1) //-> 10, truthy value
{} && someFunc() //-> the result of someFunc()
0 || null; //-> null, falsy value
null || "0"; //-> "0", truthy value
"" || void 1; //-> undefined, falsy value
!!(+"5px" || {}); //-> true, boolean truthy value
coercizione è utile quando è necessario convalidare i valori predefiniti, al fine di evitare errori, ad esempio
function divide (a, b) {
a = +a; //-> coerced to number
b = +b; //-> coerced to number
if (!a) return 0; //-> NaN or zero
return b && a/b; //-> b must be a number different from zero
}
divide(); //-> 0
divide(5); //-> NaN, no error thrown!
divide(5, "a"); //-> NaN, no error thrown!
divide(5, 0); //-> 0, division by zero prevented!
divide(49, 6); //-> 8.1666
Se si desidera impedire il ritorno NaN
, basta aggiungere un altro coercizione nella dichiarazione di ritorno:
return (b && a/b) || 0;
È possibile controllare gli altri casi di coercizione: JavaScript Coercion
Felice codifica!
è possibile utilizzare '!! (o && o.x)' –