2012-02-03 16 views
14

Creo que me falta algo básico aquí. ¿Por qué es verdadera la tercera condición IF? ¿No debería la condición evaluar a falso? Quiero hacer algo donde la identificación no es 1, 2 o 3.javascript O condiciones múltiples en la instrucción IF

var id = 1; 
if(id == 1) //true  
if(id != 1) //false 
if(id != 1 || id != 2 || id != 3) //this returns true. why? 

Gracias.

+5

porque 'id' no es igual a' 2 '' o 3'? 'falso || verdadero || true == true' –

+3

1! = 2 ... esto es obviamente cierto ... lollzzz –

+1

porque id> 3, imo. – ddacot

Respuesta

28

Con una operación OR (||), si cualquiera de las condiciones es verdadera, el resultado es verdadero.

Creo que desea una operación AND (& &) aquí.

+1

Gracias. Ahora me siento estúpido por hacer esta pregunta :(Me confundí. – tempid

+14

Ha. Todos hemos estado allí, créanme. – Gabe

1

porque el operador OR devolverá verdadero si alguna de las condiciones es verdadera, y en su código hay dos condiciones que son verdaderas.

3

Cada una de las tres condiciones se evalúa independientemente [1]:

id != 1 // false 
id != 2 // true 
id != 3 // true 

Luego se evalúa false || true || true, lo cual es cierto (a || b es cierto si cualquiera a o b es verdad). Creo que quieres

id != 1 && id != 2 && id != 3 

que sólo es cierto si el ID no es 1 y no es 2 y no es 3.

[1]: Esto no es estrictamente cierto, mira hacia arriba short-circuit evaluation. En realidad, solo se evalúan las dos primeras cláusulas porque eso es todo lo que se necesita para determinar el valor de verdad de la expresión.

1

Cuando se comprueba la identidad! = 2 retorna verdadero y deja de comprobar más

+1

Esto también es importante tener en cuenta; es útil si necesita ver si un objeto existe antes de verificar un parámetro. 'if (obj! = null && obj.field == 2)' –

+0

-1 - Un punto de vista interesante, pero no el problema de raíz. – user66001

16

que quiere ejecutar código donde el id no es (1, 2 o 3), pero el operador OR no distribuye más de Identificación. La única manera de decir lo que quiere es decir

el id no es 1, y el ID no es 2, y el ID no es 3.

que se traduce en

if (id !== 1 && id !== 2 && id !== 3) 

o, alternativamente, por algo más Pythonesque:

if (!(id in [,1,2,3])) 
+7

+1 para la construcción inferior. – user66001

+0

La alternativa verifica el índice. No si el valor está en la matriz. A diferencia de python, donde verifica el valor. 'array.indexOf (id) == -1' significa que la identificación no está en la matriz. use '! =' para lo opuesto. – Neil

+0

@NeilDesh, tenga en cuenta ',' al comienzo. Son equivalentes –

Cuestiones relacionadas