Coloque sus valores en una matriz y verifique si su artículo está en la matriz:
if ([1, 2, 3, 4].includes(test.type)) {
// Do something
}
Si un navegador que admite no tiene el Array#includes
método, puede usar este polyfill .
Breve explicación del ~
acceso directo tilde:
Actualización: dado que ahora tenemos el includes
método, ya no tiene sentido usar el ~
hack. Simplemente mantener esto aquí para las personas que están interesadas en saber cómo funciona y / o lo han encontrado en el código de otros.
En lugar de verificar si el resultado indexOf
es >= 0
, hay un pequeño atajo:
if ( ~[1, 2, 3, 4].indexOf(test.type) ) {
// Do something
}
Aquí está el violín: http://jsfiddle.net/HYJvK/
¿Como funciona esto? Si se encuentra un elemento en la matriz, indexOf
devuelve su índice. Si no se encontró el artículo, volverá -1
. Sin entrar en demasiados detalles, ~
es un operador NOT bit a bit , que regresará 0
solo por -1
.
Me gusta usar el ~
acceso directo, ya que es más sucinto que hacer una comparación del valor de retorno. Desearía que JavaScript tuviera una in_array
función que devuelva un booleano directamente (similar a PHP), pero eso es solo una ilusión ( Actualización: ahora lo hace. Se llama includes
. Ver arriba). Tenga en cuenta que jQuery inArray
, aunque comparte la firma del método PHP, en realidad imita la indexOf
funcionalidad nativa (que es útil en diferentes casos, si el índice es lo que realmente busca).
Nota importante: el uso del acceso directo tilde parece estar envuelto en controversia, ya que algunos creen con vehemencia que el código no es lo suficientemente claro y debe evitarse a toda costa (vea los comentarios sobre esta respuesta). Si comparte su sentimiento, debe apegarse a la .indexOf(...) >= 0
solución.
Una pequeña explicación más larga:
Los enteros en JavaScript están firmados, lo que significa que el bit más a la izquierda está reservado como el bit de signo; una bandera para indicar si el número es positivo o negativo, con un 1
ser negativo.
Aquí hay algunos números positivos de muestra en formato binario de 32 bits:
1 : 00000000000000000000000000000001
2 : 00000000000000000000000000000010
3 : 00000000000000000000000000000011
15: 00000000000000000000000000001111
Ahora aquí están esos mismos números, pero negativos:
-1 : 11111111111111111111111111111111
-2 : 11111111111111111111111111111110
-3 : 11111111111111111111111111111101
-15: 11111111111111111111111111110001
¿Por qué combinaciones tan extrañas para los números negativos? Sencillo. Un número negativo es simplemente el inverso del número positivo + 1; agregar el número negativo al número positivo siempre debería rendir 0
.
Para entender esto, hagamos algo de aritmética binaria simple.
Aquí es cómo agregaríamos -1
a +1
:
00000000000000000000000000000001 +1
+ 11111111111111111111111111111111 -1
-------------------------------------------
= 00000000000000000000000000000000 0
Y así es como agregaríamos -15
a +15
:
00000000000000000000000000001111 +15
+ 11111111111111111111111111110001 -15
--------------------------------------------
= 00000000000000000000000000000000 0
¿Cómo obtenemos esos resultados? Al sumar regularmente, la forma en que nos enseñaron en la escuela: comienzas en la columna de la derecha y sumas todas las filas. Si la suma es mayor que el mayor número de un solo dígito (que en decimal es9
, pero en binario es 1
), llevamos el resto a la siguiente columna.
Ahora, como notará, al agregar un número negativo a su número positivo, la columna más a la derecha que no es todo 0
s siempre tendrá dos 1
s, que al sumarse resultarán 2
. La representación binaria de dos seres 10
, que lleva la 1
a la siguiente columna, y puso una 0
para el resultado de la primera columna. Todas las demás columnas a la izquierda tienen solo una fila con a 1
, por lo que el contenido 1
de la columna anterior volverá a sumarse 2
, lo que luego se transferirá ... Este proceso se repite hasta llegar a la columna más a la izquierda, donde el1
ser transportado no tiene a dónde ir, por lo que se desborda y se pierde, y nos queda con 0
s por todas partes.
Este sistema se llama Complemento de 2 . Puedes leer más sobre esto aquí:
Representación del complemento 2 para enteros firmados .
Ahora que el curso intensivo en el complemento de 2 ha terminado, notará que -1
es el único número cuya representación binaria está 1
en todas partes.
Utilizando el ~
bit a bit NO operador, todos los bits de un número dado se invierten. La única forma de 0
volver de invertir todos los bits es si comenzamos con 1
todo.
Entonces, todo esto fue una forma larga de decir que ~n
solo volverá 0
si n
es así -1
.
in
?