2012-01-04 11 views
14

Mentre guardando attraverso un codice (JavaScript), ho trovato questo pezzo di codice:&& operatore in Javascript

<script>window.Bootloader && Bootloader.done(["pQ27\/"]);</script> 

Quello che non capisco è quello che il && sta facendo lì, il codice è da Facebook e è ovviamente minimizzato e/o offuscato, ma fa sempre la stessa cosa.

tl; dr: cosa fa l'operatore && qui?

risposta

18

&& si assicura che la funzione/oggetto Bootloader esista prima di chiamare il metodo done su di esso. Il codice sfrutta il cortocircuito booleano per garantire che la prima espressione valuti prima dell'esecuzione del secondo. Vedere la voce short-circuit evaluation wikipedia per una spiegazione più approfondita.

+1

Non ci sono classi in JavaScript. Bootloader sarebbe una funzione o oggetto – paislee

+0

@paislee: Roger, aggiornato. – sdolan

+6

Non "si assicura" * Bootloader * è una funzione o un oggetto, verifica solo se l'oggetto * window * ha una proprietà * Bootloader * il cui valore è true. Se è così, si presume che sia chiamabile. – RobG

14
window.Bootloader && Bootloader.done(["pQ27\/"]); 

è equivalente a:

if(window.Bootloader) { 
    Bootloader.done(["pQ27\/"]); 
} 
8

&& è un operatore AND, proprio come la maggior parte tutto il resto. Non c'è davvero niente di speciale a riguardo.

La maggior parte delle lingue, incluso JavaScript, interromperà la valutazione di un operatore AND se il primo operando è falso.

In questo caso, se window.Bootloader non esiste, sarà undef, che restituisce false, quindi JavaScript salterà la seconda parte.

Se è vero, continua e chiama Bootloader.done(...).

pensare ad esso come una scorciatoia per if(window.Bootloader) { Bootloader.done(...) }

2

anche & & operatore restituisce il primo valore incontrato di questo genere: null, undefined, 0, false, NaN ""

es: se

var1 = 33 
var2 = 0 
var3 = 45 

var1 && var2 && var3 
returns 0