Foros del Web » Programando para Internet » Javascript »

Problema con operadores

Estas en el tema de Problema con operadores en el foro de Javascript en Foros del Web. Hola a todos, me encuentro con este problema: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original a1 = - 1 a2 = 15 pa = 0 ...
  #1 (permalink)  
Antiguo 24/04/2011, 17:08
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Problema con operadores

Hola a todos, me encuentro con este problema:
Código Javascript:
Ver original
  1. a1 = -1
  2. a2 = 15
  3. pa = 0
  4. es = 0
  5.  
  6. (a1 > 0) || (a2 > 0) && (pa != 0) && (es != 0)
Esa expresion da true y deberia dar false.
Que hay mal?

Gracias
  #2 (permalink)  
Antiguo 24/04/2011, 17:30
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Problema con operadores

A mí me da false
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #3 (permalink)  
Antiguo 24/04/2011, 18:43
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Problema con operadores

buenas,
a mi tambien me da false. ¿sera que tienes dificultad para interpretarlo? primero se evaluan las operaciones AND segun el orden que aparecen. se detiene en la primera evaluacion que devuelva false o simplemente devuelve la ultima evaluacion. por tanto,
Código:
(a1 > 0) || (a2 > 0) && (pa != 0) && (es != 0);

// se podria transcribir a ;
(a1 > 0) || true && false && (es != 0);

// de modo que devuelve el false e ignora el resto de las operaciones AND ;
(a1 > 0) || false;

// a1 no es mayor que cero, entonces devuelve false ;
false || false;

// finalmente, el resultado de la expresion es false porque ninguno de los dos boolean es true ;
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 24/04/2011 a las 18:51
  #4 (permalink)  
Antiguo 25/04/2011, 09:44
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Respuesta: Problema con operadores

Pues mi navegador lo interpreta como true, la unica manera que consegui que diera el resultado que deberia dar es poniendo esto:
Código Javascript:
Ver original
  1. ((a1 > 0) || (a2 > 0)) && (pa != 0) && (es != 0)
  #5 (permalink)  
Antiguo 25/04/2011, 09:52
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Problema con operadores

pues es curioso, ¿que navegador es ese? fijate que ahora tu codigo se interpreta por otro orden puesto que los parentesis tienen un orden de precedencia (prioridad) mayor. en este caso, primero se evalua el OR y luego los AND.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #6 (permalink)  
Antiguo 25/04/2011, 15:12
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Respuesta: Problema con operadores

Este es el codigo:
Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     $("body").mouseover(function(){
  3.         $("#subm").attr({disabled:"disabled"});
  4.       if($("#imaget").length > 0 || $("#imagen").length > 0) {
  5.         if ($("#imaget").length > 0) {var a = $("#imaget").val();} else if ($("#imagen").length > 0) {var a = $("#imagen").val()};
  6.         a1 = a.indexOf('.jpg');
  7.         a2 = a.indexOf('.JPG');
  8.         var pa = $("#paises")[0].selectedIndex ;
  9.         var es = $("#estados")[0].selectedIndex ;
  10.         alert(a1+"\n"+a2+"\n"+pa+"\n"+es);
  11.         alert((a1 > 0) || (a2 > 0) && (pa != 0) && (es != 0));
  12.         if ((a1 > 0) || (a2 > 0) && (pa != 0) && (es != 0)) {
  13.             $("#subm").removeAttr("disabled")}
  14.       };
  15.     });
  16. });
Despues de que se carge una imagen en #imagen (123243-kolly.jpg) y no seleccionada nada en el combobox #paises y nada en el combobox #estados... estos dos alert salen sucesivos:

Probado en Google Chrome 11.0


Un saludo
  #7 (permalink)  
Antiguo 25/04/2011, 19:37
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Problema con operadores

buenas,
fijate que a diferencia del codigo codigo original, en este ultimo ejemplo a1 tiene el valor de 29 mientras que a2 tiene como valor -1. por tanto es distinto y al final evalua a true.
Código:
var a1 = 29, a2 = -1, pa = 0, es = 0;
(a1 > 0) || (a2 > 0) && (pa != 0) && (es != 0);
true || false && false && false;
// primero se evalua las operaciones AND, por tanto la secuencia de AND devuelve el primer false, marcado en bold ;
true || false;
// el resutlado de la expresion anterior es true ;
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #8 (permalink)  
Antiguo 26/04/2011, 13:00
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 15 años
Puntos: 34
Respuesta: Problema con operadores

Ahh, vale, vale. En el codigo inicial lo puse por poner un ejemplo...
Muchas gracias, con los parentesis ya esta solucionado.

Un saludo

Etiquetas: operadores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:32.