2012-05-05 11 views
15

Eventuali duplicati:
What does the || operator do?Cosa significano due linee verticali in un valore di oggetto in javascript?

Forse qualcuno può fornire un codice migliore frammento di, ma cosa significa || nel seguente ?:

var time = $(el).data('start') || new Date(); 

È un or operatore e, in tal caso, come ha senso che una variabile possa avere due valori diversi?

+0

hi @Esailija, grazie per questo riferimento. –

+0

L'azione che speravo di fare era di eliminare questa domanda, dal momento che non è diversa da quella già chiesta e risposta. – Esailija

+1

Ho cercato su google per trovare qualcosa di simile al link che hai menzionato ma non ho trovato nulla usando parole chiave come "due, doppia linea verticale javascript". Perché non c'era molto in inglese, ho deciso di porre la domanda. –

risposta

33

Questo è un operatore OR. Quello che devi capire è:

  • I valori non booleani vengono convertiti in un valore booleano quando utilizzati in un operatore logico. I valori convertiti in false sono chiamati "falsy" e i valori convertiti in true sono chiamati "truthy". I valori di Falsy includono cose come 0, undefined, null e così via. Ulteriori informazioni allo Truthy and Falsy: When All is Not Equal in JavaScript.

  • I OR operatore cortocircuiti: mantiene la valutazione di espressioni finché trova su cioè true, e poi si ferma.

Quindi, var time = $(el).data('start') || new Date(); significa "impostato time ai dati start dell'elemento el, O, se è falsy, utilizzare il tempo corrente".

+0

hi @apsillers, grazie per la spiegazione di "falsy" e "truthy". Ho sentito quelle precedenti ma non ho mai saputo cosa volessero dire. –

+0

Semplice e diretto al punto - ottima risposta. – Yatrix

5

Significa "o". In questo caso assegna il valore di $(el).data('start') alla variabile time oppure, se questo non esiste o restituisce invece false, assegna invece il valore restituito da new Date(). Oppure, come più chiaramente notato da Malovolio, nei commenti:

... se $(el).data('start') è "falsy" (cioè, undefined, null, 0, false, una stringa vuota, o NaN), poi è new Date() valutato e assegnato a time.

L'aspetto importante di un operatore logico:

operatori logici sono tipicamente utilizzati con valori booleani (logici); quando lo sono, restituiscono un valore booleano. Tuttavia, lo & & e || gli operatori restituiscono effettivamente il valore di uno degli operandi specificati, quindi se questi operatori vengono utilizzati con valori non booleani, potrebbero restituire un valore non booleano.

Riferimenti:

+0

grazie @David, molto utile. ho capito adesso. –

+1

Più precisamente, se '$ (el) .data ('start')' è "falsy" (cioè, indefinito, nullo, 0, falso, una stringa vuota o 'NaN'), quindi' new Date() 'viene valutato e assegnato a' time'. Stranamente, le liste vuote e gli oggetti vuoti non sono considerati falsi. – Malvolio

-1

Significa logical sum. var time = $(el).data('start') || new Date(); se $(el).data('start') avrà il valore undefined o false, quindi time avrà valore dalla funzione new Date.

+0

grazie @Denis. in che modo la 'somma logica' è diversa da' o'? –

+1

Per i downvoters cosa è scritto male? –

+0

perché questa risposta è stata downvoted? –

1

Il modo in cui l'operatore || viene valutato è che se la prima parte è true-ish, lo ha restituito. Se la prima parte è false-ish, restituisce il secondo. Le espressioni sopra è quindi pari a:

if ($(el).data('start')) { 
    time = $(el).data('start'); 
} else { 
    time = new Date(); 
} 
5
exp1 || exp2 

viene valutata exp1. Se exp1 è vero, exp2 non viene valutato (noto come valutazione di cortocircuito). Se exp1 restituisce false, viene valutata exp 2. Se exp1 O exp2 è vero allora (exp1 || exp2) viene valutato come true.

Ma in Javascript, è possibile impostare i valori utilizzando l'operatore.

a = something 

if (prop) 

a = prop 

può essere riscritta come

a = prop || something 
Problemi correlati