2012-06-28 6 views
10

Questo non ha senso per me, ma ho la sensazione che ho visto un codice di utilizzare questo:È possibile aggiungere una condizione a una dichiarazione di variabile?

var abc = def || ghi; 

La mia domanda è, è questo è valido? Possiamo aggiungere una condizione a una dichiarazione di variabile? Immagino che la risposta sia no ma ho questo in mente che ho visto qualcosa di simile in codice una volta.

risposta

17

Questo dà al abc il valore di def se esso isn' t falsy (ovvero non false, null, undefined, 0 o una stringa vuota), o il valore di ghi in caso contrario.

Ciò equivale a:

var abc; 
if (def) abc = def; 
else abc = ghi; 

Questo è comunemente usato per le opzioni:

function myfunc (opts) { 
    var mything = opts.mything || "aaa"; 
} 

Se si chiama myfunc({mything:"bbb"}) si utilizza il valore che si dà. Usa "aaa" se non fornisci nulla.

In questo caso, al fine di consentire al chiamante totalmente saltare il parametro, si potrebbe anche hanno iniziato la funzione con

opts = opts || {}; 
+0

+1. Potrebbe essere più accurato dire se "' def' restituisce true ", poiché se è' 0', la stringa vuota, 'false' ecc. Allora' abc' otterrà il valore di 'ghi'. –

3

, è possibile aggiungere condizioni di dichiarazione di variabile

Si può usare in questo modo,

function greet(person) { 
    var name = person || 'anonymouse'; 
    alert('Hello ' + name); 
} 
greet('jashwant'); 
greet();​ 

jsfiddle demo

0

Okay, vedi, è qualcosa di simile, si sia verificare se uno è vero . Il vero verrà restituito. :)

var abc = def || ghi; 

è equivalente a:

var abc = return (def == true) or (ghi == true) 
+2

Attento. La tua risposta implica che questa operazione assegna sempre un valore booleano. Questo è ** solo ** il caso se 'def' e' ghi' sono valori booleani. In tutti i casi, 'abc' assumerà il valore di' ghi' (qualunque sia questo valore) _unless 'def' si trasforma in vero_. Se 'def' è" ciao ", allora abc sarà" ciao "(non booelan). Se 'def' è falso/vuoto/zero/indefinito/ecc., E' ghi' è "mondo", quindi 'abc' sarà" mondo "(di nuovo, non booleano). – user113215

6

Il codice var abc = def || ghi;

è la stessa cosa di

if (def) { //where def is a truthy value 
    var abc = def; 
} else { 
    abc = ghi; 
} 

Si desidera una condizione come l'istruzione if?

if (xxx==="apple") { 
    var abc = def; 
} else { 
    abc = ghi; 
} 

che, come scritto come un operatore ternario è:

var abc = (xxx==="apple") ? def : ghi; 
+0

Ho appena visto un esempio live di quello che ho letto ieri (javascript hoist). Anche se 'def' è falso nel tuo primo esempio,' abc' non è globale. Ho ragione ? – Jashwant

+0

'abc' può essere globale, dipende solo da dove è definito. – epascarello