L’altro giorno mi sono imbattuto in un frammento di codice di cui mi sono incuriosito, ma non sono proprio sicuro di quello che effettivamente fa;
options = options || {};
Il mio pensiero finora; imposta le options
variabili per valutare le options
se esiste, in caso contrario, imposta su object vuoto.
Si No?
Questo è utile per impostare i valori predefiniti per gli argomenti della funzione, ad esempio:
function test (options) { options = options || {}; }
Se chiami test
senza argomenti, le options
saranno inizializzate con un object vuoto.
L’OR logico ||
l’operatore restituirà il suo secondo operando se il primo è falso .
I valori di Falsy sono: 0
, null
, undefined
, la stringa vuota ( ""
), NaN
, e ovviamente false
.
Quello che hai nel tuo snippet è il modo più comune per implementare il modello predefinito , restituirà il valore del primo operando che produce un valore vero quando viene convertito in booleano.
var some_data = undefined; var some_obj_1 = undefined; var some_obj_2 = {foo: 123}; var str = some_data || "default"; var obj = some_obj1 || some_obj2 || {}; /* str == "default", obj == {foo: 123} */
quanto sopra è fondamentalmente equivalente a fare la seguente alternativa più verbosa
var str = undefined; var obj = undefined; if (some_data) str = some_data; else str = "default"; if (some_obj1) obj = some_obj1; else if (some_obj2) obj = some_obj2; else obj = {};
esempi di valori forniti dall’operatore logico OR:
1 || 3 -> 1 0 || 3 -> 3 undefined || 3 -> 3 NaN || 3 -> 3 "" || "default" -> "default" undefined || undefined -> undefined false || true -> true true || false -> true null || "test" -> "test" undefined || {} -> {} {} || true -> {}
null || false || {} -> {} 0 || "!!" || 9 -> "!!"
Come puoi vedere, se non viene trovata alcuna corrispondenza, il valore dell’ultimo operando è yield.
Ci sono diversi casi, anche se il più popolare è quello di impostare il valore predefinito degli argomenti della funzione, come nel seguito:
function do_something (some_value) { some_value = some_value || "hello world"; console.log ("saying: " + some_value); } ... do_something ("how ya doin'?"); do_something ();
saying: how ya doin'? saying: hello world
Questo è in particolare una delle differenze che javascript ha rispetto a molti altri linguaggi di programmazione popolari.
L’operatore ||
non fornisce implicitamente un valore booleano ma mantiene i tipi di operando e produce il primo che valuterà in vero in un’espressione booleana.
Molti programmatori che provengono da lingue in cui questo non è il caso (C, C ++, PHP, Python, ecc. Ecc.) Trovano questo piuttosto confuso all’inizio, e ovviamente c’è sempre il contrario; le persone provenienti da javascript ( perl , ecc.) si chiedono perché questa funzione non sia implementata altrove.
Sì. Il campione è equivalente a questo:
if (options) { options = options; } else { options = {}; }
L’operatore OR ( ||
) eseguirà un cortocircuito e restituirà il primo valore di verità.
Sì, è esattamente quello che fa.
Trovato un’altra variazione di questo:
options || (options = {});
Sembra fare lo stesso trucco.