2011-08-21 31 views
8

Por qué no puedo hacer esto:tareas múltiples en el interior de la sentencia if

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

Esto no funcionará bien:

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

Respuesta

10

probar este (que debería darle una pista):

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

La prioridad por defecto son para poner la última asignación, por lo que todos las declaraciones && se calculan primero. Esto es fácil de ver cuando usas erróneamente = en lugar de ==, y tiene sentido si consideras el uso más común de las combinaciones de = y &&. –

2

Comprobar Prioridad de los operadores, Use

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

UPD: No se olvide que después de código no fijará bar a cierto porque & & es Short Circuit operador

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

Sample

Cuestiones relacionadas