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 :)
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 :)
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 ??= {};
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
.
per la precisione: se è falsa - questo include '0',' "" ',' NaN', 'null' e' false'. – Christoph
@Christoph - grazie, modificato. –
assegna un oggetto vuoto predefinito window.Picture2
se window.Picture2
è indefinito (falsy)
Se il window.Picture2
è indefinito (falso in una valutazione condizionale) allora l'OR (||
) è exectuted e window.Picture2
diventa un oggetto vuoto.
+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
@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
@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