Coloque seus valores em uma matriz e verifique se o item está na matriz:
if ([1, 2, 3, 4].includes(test.type)) {
// Do something
}
Se um navegador que você suporta não possui o Array#includes
método, você pode usar esse polyfill .
Breve explicação do ~
atalho til:
Atualização: Como agora temos o includes
método, não há mais sentido em usar o ~
hack. Basta mantê-lo aqui para pessoas interessadas em saber como ele funciona e / ou o encontraram no código de outras pessoas.
Em vez de verificar se o resultado indexOf
é >= 0
, existe um pequeno atalho:
if ( ~[1, 2, 3, 4].indexOf(test.type) ) {
// Do something
}
Aqui está o violino: http://jsfiddle.net/HYJvK/
Como é que isso funciona? Se um item for encontrado na matriz, indexOf
retornará seu índice. Se o item não foi encontrado, ele retornará -1
. Sem entrar em muitos detalhes, ~
é um operador NOT bit bit , que retornará 0
apenas para -1
.
Eu gosto de usar o ~
atalho, pois é mais sucinto do que fazer uma comparação no valor de retorno. Eu gostaria que o JavaScript tivesse uma in_array
função que retorne um booleano diretamente (semelhante ao PHP), mas isso é apenas uma ilusão ( atualização: agora funciona).includes
. Veja acima). Observe que o jQuery inArray
, enquanto compartilha a assinatura do método PHP, na verdade imita a indexOf
funcionalidade nativa (que é útil em diferentes casos, se o índice for o que você realmente procura).
Nota importante: O uso do atalho til parece estar envolvido em controvérsias, pois alguns acreditam veementemente que o código não é suficientemente claro e deve ser evitado a todo custo (consulte os comentários nesta resposta). Se você compartilha o sentimento deles, deve se ater ao.indexOf(...) >= 0
solução.
Um pouco mais de explicação:
Inteiros em JavaScript são assinados, o que significa que o bit mais à esquerda é reservado como o bit de sinal; uma bandeira para indicar se o número é positivo ou negativo, com um1
negativo.
Aqui estão alguns exemplos de números positivos no formato binário de 32 bits:
1 : 00000000000000000000000000000001
2 : 00000000000000000000000000000010
3 : 00000000000000000000000000000011
15: 00000000000000000000000000001111
Agora, aqui estão os mesmos números, mas negativos:
-1 : 11111111111111111111111111111111
-2 : 11111111111111111111111111111110
-3 : 11111111111111111111111111111101
-15: 11111111111111111111111111110001
Por que combinações tão estranhas para os números negativos? Simples. Um número negativo é simplesmente o inverso do número positivo + 1; adicionar o número negativo ao número positivo deve sempre gerar0
.
Para entender isso, vamos fazer uma aritmética binária simples.
Aqui está como adicionaríamos -1
a +1
:
00000000000000000000000000000001 +1
+ 11111111111111111111111111111111 -1
-------------------------------------------
= 00000000000000000000000000000000 0
E aqui está como adicionaríamos -15
a +15
:
00000000000000000000000000001111 +15
+ 11111111111111111111111111110001 -15
--------------------------------------------
= 00000000000000000000000000000000 0
Como obtemos esses resultados? Fazendo acréscimos regulares, da maneira como fomos ensinados na escola: você começa na coluna mais à direita e soma todas as linhas. Se a soma for maior que o maior número de um dígito (que é decimal 9
, mas em binário 1
), transportamos o restante para a próxima coluna.
Agora, como você notará, ao adicionar um número negativo ao número positivo, a coluna mais à direita, que não é todos os 0
s, sempre terá dois 1
s, que, quando somados, resultarão em 2
. A representação binária de dois seres 10
, carregamos a 1
para a próxima coluna e colocamos um 0
para o resultado na primeira coluna. Todas as outras colunas à esquerda têm apenas uma linha com a 1
, portanto, a 1
passagem da coluna anterior será adicionada novamente 2
, que será transferida ... Esse processo se repete até chegar à coluna mais à esquerda, onde o 1
transportador não tem para onde ir, então transborda e se perde, e ficamos com 0
s por toda parte.
Este sistema é chamado de Complemento 2 . Você pode ler mais sobre isso aqui:
Representação do complemento 2 para números inteiros assinados .
Agora que o curso intensivo do complemento 2 terminou, você notará que esse -1
é o único número cuja representação binária está 1
em todo o lado.
Usando o ~
operador NOT bit a bit, todos os bits em um determinado número são invertidos. A única maneira de 0
voltar a inverter todos os bits é se começarmos com 1
todos os lados.
Então, tudo isso foi um longo modo de dizer que ~n
só voltará 0
se n
for -1
.
in
?