2013-04-22 11 views
10

Im studiando javascript e oggi ho trovato questo codice:dichiarazione javascript con || {};

window.Picture2 = window.Picture2 || {}; 

Non capisco il || {}; Qualcuno può spiegarlo per me? Tks così tanto :)

risposta

7

Questo è un modo pericoloso per assegnare un valore predefinito a una variabile globale Picture2.

window.Picture2 = window.Picture2 || {}; 

Questo inizializza window.Picture2 come un nuovo oggetto {} se non è definito. Tuttavia poiché questo è un controllo per truthyness, Picture2 anche verrà assegnato un oggetto vuoto se ha uno di questi falsy values:

// these are all falsy 
0, NaN, null, '', undefined, false 

che potrebbe non essere il comportamento desiderato per tutti questi casi, soprattutto per il 0 , NaN, false o '' Valore.

C'è una proposta di ECMAScript 6 per aggiungere un default operator che controlla proprio per undefined e nient'altro:

window.Picture2 ??= {}; 
+0

+1 E non sarebbe meglio controllare 'if (! Window.Picture2) {window.picture2 = {}}'?Il confronto deve essere fatto in entrambi i casi, ma la riassegnazione potrebbe essere saltata. Evento anche se questo codice è leggermente più lungo, dovrebbe essere più veloce e per alcune persone più leggibile. – insertusernamehere

+1

@insertusernameChi questo incarico * potrebbe * essere internamente ottimizzato, ma comunque hai ragione, anche se hai ancora il trabocchetto dei valori falsi il tuo codice è un passo nella giusta direzione. – Christoph

+0

@insertusernamehere l'opzione di salvataggio è 'if (typeof window.Picture2! = Undefined) {...}' - molto dettagliata ma si potrebbe inserire questa in una funzione 'defined' o qualcosa di simile. – Christoph

1

Si legge come:

Se window.Picture2 è indefinito o nullo assegnare oggetto vuoto per window.Picture2

+2

questo non è JSON. –

+2

json vuoto? Cos'è quello? – Christoph

+0

@GeraldSchneider mi dispiace male. – loxxy

4

Verificherà che è stato definito .Picture2, se ha usato quel valore, altrimenti assegna Window.Picture2 a un nuovo oggetto letterale.

Come gli stati @Christoph - Picture2 verrà assegnato un nuovo oggetto letterale, se l'oggetto è falsy.

http://www.sitepoint.com/javascript-truthy-falsy/

+1

per la precisione: se è falsa - questo include '0',' "" ',' NaN', 'null' e' false'. – Christoph

+0

@Christoph - grazie, modificato. –

6

assegna un oggetto vuoto predefinito window.Picture2 se window.Picture2 è indefinito (falsy)

+0

purtroppo non solo quando è "non definito" ... – Christoph

+0

@Christoph è per questo In '()' Ho detto 'falsy' –

+0

Questo è vero, ma è il punto più importante da notare quando si utilizza questa tecnica (vedi la mia risposta)! – Christoph

1

Se il window.Picture2 è indefinito (falso in una valutazione condizionale) allora l'OR (||) è exectuted e window.Picture2 diventa un oggetto vuoto.

Problemi correlati