2013-05-08 9 views
6

Solitamente imposto proprietà dell'oggetto in questo modo,Come posso impostare facilmente una variabile su false con un valore predefinito true?

// Boolean 
this.listening = config.listening || true; 

Ma config.listening è vero o falso, e in questo caso this.listening sarà sempre vero perché se config.listening è falso sarà uguale vero.

C'è un modo migliore per impostare queste proprietà booleane senza dover fare un'istruzione if?

C'è una funzione if isset in javascript per verificare che esista piuttosto che a cosa equivale?

risposta

12

Si potrebbe usare l'operatore ternario (condizionale) in questo modo:

this.listening = config.listening === false ? false : true; 

Se config.listening è false, this.listening è impostato su false. Se è qualsiasi altro valore, è impostato su true.

Se si desidera controllare se è definito, è possibile utilizzare:

this.listening = typeof config.listening !== "undefined" 

Riferimenti:

+1

Grazie per questo, ha funzionato perfettamente – user2251919

+0

ha. Webstorm ha semplificato la tua risposta a: config.listening! == false, sembra essere corretto. –

+1

@AlexMills Hai assolutamente ragione! La condensazione è sicuramente possibile, stavo solo cercando di essere esplicito/descrittivo quando ho scritto questo (sto supponendo) – Ian

3

È necessario controllare per assicurarsi che sia non indefinito, non che sia un valore "falso".

this.listening = config.listening!==undefined ? config.listening : true; 
+0

... o "ascoltare" in config' probabilmente – Pointy

+1

be better do do 'typeof config.listening! ==" undefined "' o è solo un fattore di leggibilità – user2251919

+0

Sì, sarebbe meglio. (O 'ascoltare' in config). Vedi questa domanda per una discussione sull'argomento: http://stackoverflow.com/questions/519145/how-can-i-check-whether-a-variable-is-defined-in-javascript –

-1

Il modo più veloce sarebbe questo.

d = true; 

d restituisce vero.

Quindi utilizzare solo il! operatore per passare il valore booleano da vero a falso.

d = !d; 

d restituisce falso.

Quindi ancora e ancora.

d = !d; 

d restituisce vero.

+1

Per spiegare la risposta in modo più preciso all'OP, è possibile aggiungere queste informazioni. 'this.listening = !! config.listening'. Due NOT mantengono il valore booleano effettivo, ma rende 'null' o' undefined' come 'false'. Ma ancora, questo non è il PO che sta cercando. La persona sta cercando il valore predefinito come 'true' anche se' config.listening' è 'indefinito' – Lokesh