CUIDADO:
!a
se evalúa como verdadera o falsa. Si una conversión de a
a bool es true
, entonces !a
se evalúa como falso.
Todos los enteros positivos se evalúan a true
. Entonces !a
evaluará a falso. Una comparación que use el doble igual a ==
en 1 probará esa booleana !a
con la booleana 1
o true
. Entonces, si a
es un número entero positivo como sospecho que es entonces su declaración if
SIEMPRE evaluará a falso.
Si desea probar algo NO es necesario cambiar los primeros equivalentes en su operador de comparación (===
) como !
.
E.g. var a = 2; if(a!==1) { // do something }
< - A es 2 y, por lo tanto, si el wille de comparación se evalúa como verdadero a
no igual 1
.
En su código tenemos:
var a = 2;
if(!a==1){
// a was 2 (or boolean true by default)
// but using ! has negated its boolean value
// so !a evaluates to boolean false
// which is being compared to 1 (evaluating to boolean true)
// so this if statement will never get here
}
Espero que ayude
P. S.Recuerde que sus operadores de comparación:
!"hello world" == 0 // true
!"hello world" === 0 // false
actualización
vi su comentario en otro post que decía que a
es 0
hasta que algo sucede entonces es 1
.
En este caso:
var a = 0; // integer 0 or bool false
if(!a==1){ // if the bool opposite of 0 (false) is equal to 1 (true)
// well, opposite of false is true, so you're checking if true is equal to true
// so this will get called
e.preventDefault();
}
* es el código correcto * ¿Por qué lo preguntas? ¿Tienes problemas? Si es así, ¿cuáles? –
¿Qué es 'a'? ¿Puedes publicarlo en tu código? – elclanrs
Tenga cuidado, hay una diferencia entre '==' y '==='. Si desea verificar si 'a' es igual al número entero' 1', entonces debería usar 'a === 1'. Consulte http://stackoverflow.com/questions/359494/javascript-vs-does-it-matter-which-equal-operator-i-use para conocer la diferencia. –