2009-05-06 12 views
6
Attacklab.wmd_env.buttons=Attacklab.wmd_env.buttons||_4; 

cosa fa il || fare in questo caso?
Aggiunge _4 alla matrice che è Attacklab.wmd_env.buttons?Cosa fa il || operatore?

+4

Si prega di correggere il titolo. – rkb

+4

Wow ci sono voluti 7 tentativi per ottenere il titolo giusto ... – Pool

risposta

18

L'operatore || in JavaScript restituisce il valore a sinistra se tale valore non viene valutato su false, altrimenti restituisce il valore a destra.

Da Mozilla's Core JavaScript 1.5 Reference:

expr1 || expr2
Restituisce expr1 se può essere convertita in true; in caso contrario, restituisce expr2. Pertanto, se utilizzato con valori booleani, || restituisce true se uno degli operandi è true; se entrambi sono falsi, restituisce false.

Quindi, in questo caso, se Attacklab.wmd_env.buttons non hanno un valore, si imposta il valore di _4.

+0

È strano che MDC usi piuttosto ambiguo "Restituisce expr1 se ** può essere convertito ** in vero". Non si tratta di "in grado di essere convertiti", si tratta di quale espressione di valore restituisce. – kangax

8

Se Attacklab.wmd_env.buttons è null o undefined, esso sarà impostato al valore di default _4.

12

E 'un modo elegante di scrivere

if(!Attacklab.wmd_env.buttons) 
    Attacklab.wmd_env.buttons = _4; 

E' bello per la fornitura di valori di default. Tenere presente che non solo null e undefined attivano il condizionale, ma anche 0, false e '', ovvero tutto ciò che è considerato false in contesti booleani.

+0

+1 per elencare esplicitamente quali valori valutano su false –

+0

E, naturalmente, 'NaN';) – kangax

+0

@kangax: sì, era l'unica cosa mancante nell'elenco (vedere ECMA-262, sezione 9.2) – Christoph

4

Il || l'operatore controlla se il valore fornito sul lato sinistro dell'espressione è falso (in un contesto booleano). In tal caso restituisce un valore alternativo indicato dal lato destro dell'espressione. Altrimenti restituisce il valore originale.

Così, per esempio il seguente codice fisserebbe 'Foo' ad un valore predefinito se è nullo:

 
Foo = Foo || "Default Value" 

Questo è talvolta chiamato l'operatore coalescenza. È supportato in altre lingue come Ruby e Perl. C# ha il ?? operatore che fa la stessa cosa

+0

Quindi, con questa risposta sa come si chiama, e quali altre langaghe lo usano, e anche la diversa sintassi in C# ... e ancora non sa cosa fa. – Beska

+0

Buon punto, probabilmente avrei dovuto lasciare un commento. Ad ogni modo, la mia risposta è stata aggiornata. –

+0

+1 per il nome corretto! Nessun'altra domanda/risposta SO sembrava voler dare quello ... Aiutami a trovare l'equivalente in Xquery (è $ $ foo: = ($ foo, "valore predefinito") [1] per chiunque sia curioso). –