2011-08-21 12 views
8

Perché non posso fare questo:assegnazioni multiple all'interno di se-dichiarazione

 
var fooElement, barElements; 
if(fooElement = document.getElementById('foo') && barElements = fooElement.getElementsByTagName('bar') && barElements[0] && barElements[0].onclick) 
{ 
    console.log(barElements[0].onclick); 
} 

Questo non funzionerà neanche:

 
var foo, bar; 
if(foo = true && bar = true) 
{ 
    console.log('yay'); 
} 

risposta

10

Prova questa (dovrebbe darvi un indizio):

var foo, bar; 
if((foo = true) && (bar = true)) 
{ 
    console.log('yay'); 
} 
+1

La precedenza di default sono per mettere l'assegnazione scorso, in modo che tutti le istruzioni && vengono calcolate per prime. Questo è facile da vedere quando usi erroneamente = piuttosto che ==, e ha senso se consideri l'uso più comune delle combinazioni di = e &&. –

2

Controllare precedenza dell'operatore, utilizzare

if((foo = true) && (bar = true)) 
{ 
    alert(foo); 
} 

UPD: Non dimenticate che a seguito di codice non imposterà bar al vero perché & & è Short Circuit operatore

if((foo = false) && (bar = true)) 
{ 
    alert(foo); 
} 

Sample