JavaScript Operatori di logica con valori non booleani (coercizione booleana)


Esempio

L'OR logico ( || ), letto da sinistra a destra, valuterà il primo valore di verità . Se non viene trovato alcun valore di verità , viene restituito l'ultimo valore.

var a = 'hello' || '';             // a = 'hello'
var b = '' || [];                  // b = []
var c = '' || undefined;           // c = undefined
var d = 1 || 5;                    // d = 1
var e = 0 || {};                   // e = {}
var f = 0 || '' || 5;              // f = 5
var g = '' || 'yay' || 'boo';      // g = 'yay'

L'AND logico ( && ), letto da sinistra a destra, valuterà il primo valore di falsy . Se non viene trovato alcun valore falso , viene restituito l'ultimo valore.

var a = 'hello' && '';                  // a = ''
var b = '' && [];                       // b = ''
var c = undefined && 0;                 // c = undefined
var d = 1 && 5;                         // d = 5
var e = 0 && {};                        // e = 0
var f = 'hi' && [] && 'done';           // f = 'done'
var g = 'bye' && undefined && 'adios';  // g = undefined

Questo trucco può essere utilizzato, ad esempio, per impostare un valore predefinito per un argomento di funzione (prima di ES6).

var foo = function(val) {
    // if val evaluates to falsey, 'default' will be returned instead.
    return val || 'default';
}

console.log( foo('burger') );  // burger
console.log( foo(100) );       // 100
console.log( foo([]) );        // []
console.log( foo(0) );         // default
console.log( foo(undefined) ); // default

Tieni a mente che per gli argomenti, 0 e (in misura minore) la stringa vuota sono anche spesso valori validi che dovrebbero poter essere esplicitamente passati e sovrascrivere un valore predefinito, che, con questo modello, non lo faranno (perché sono falsi ).