Inserisci i tuoi valori in un array e controlla se il tuo articolo è nell'array:
if ([1, 2, 3, 4].includes(test.type)) {
// Do something
}
Se un browser supportato non ha il Array#includesmetodo, è possibile utilizzare questo polyfill .
Breve spiegazione della ~scorciatoia tilde:
Aggiornamento: dato che ora abbiamo il includesmetodo, non ha più senso utilizzare l' ~hacking. Tieni questo qui solo per le persone che sono interessate a sapere come funziona e / o che lo hanno riscontrato nel codice di altri.
Invece di verificare se il risultato di indexOfè >= 0, esiste una piccola scorciatoia:
if ( ~[1, 2, 3, 4].indexOf(test.type) ) {
// Do something
}
Ecco il violino: http://jsfiddle.net/HYJvK/
Come funziona? Se viene trovato un elemento nell'array, indexOfrestituisce il suo indice. Se l'articolo non è stato trovato, tornerà -1. Senza entrare troppo nei dettagli, ~è un operatore NOT bit per bit , che tornerà 0solo per -1.
Mi piace usare la ~scorciatoia, poiché è più concisa che fare un confronto sul valore restituito. Vorrei che JavaScript avesse una in_arrayfunzione che restituisse direttamente un booleano (simile a PHP), ma è solo un pio desiderio ( Aggiornamento: adesso lo fa. Si chiama includes. Vedi sopra). Nota che jQuery inArray, pur condividendo la firma del metodo PHP, imita effettivamente la indexOffunzionalità nativa (che è utile in diversi casi, se l'indice è ciò che stai veramente cercando).
Nota importante: l' uso della scorciatoia tilde sembra essere oggetto di controversie, poiché alcuni credono con veemenza che il codice non sia abbastanza chiaro e dovrebbe essere evitato a tutti i costi (vedere i commenti su questa risposta). Se condividi il loro sentimento, dovresti attenersi alla .indexOf(...) >= 0soluzione.
Una spiegazione un po 'più lunga:
I numeri interi in JavaScript sono firmati, il che significa che il bit più a sinistra è riservato come bit di segno; una bandiera per indicare se il numero è positivo o negativo, con un 1essere negativo.
Ecco alcuni numeri positivi di esempio in formato binario a 32 bit:
1 : 00000000000000000000000000000001
2 : 00000000000000000000000000000010
3 : 00000000000000000000000000000011
15: 00000000000000000000000000001111
Ora ecco gli stessi numeri, ma negativi:
-1 : 11111111111111111111111111111111
-2 : 11111111111111111111111111111110
-3 : 11111111111111111111111111111101
-15: 11111111111111111111111111110001
Perché combinazioni così strane per i numeri negativi? Semplice. Un numero negativo è semplicemente l'inverso del numero positivo + 1; l'aggiunta del numero negativo al numero positivo dovrebbe sempre produrre 0.
Per capirlo, facciamo un po 'di semplice aritmetica binaria.
Ecco come aggiungeremmo -1a +1:
00000000000000000000000000000001 +1
+ 11111111111111111111111111111111 -1
-------------------------------------------
= 00000000000000000000000000000000 0
Ed ecco come aggiungeremmo -15a +15:
00000000000000000000000000001111 +15
+ 11111111111111111111111111110001 -15
--------------------------------------------
= 00000000000000000000000000000000 0
Come possiamo ottenere quei risultati? Facendo regolarmente aggiunte, il modo in cui ci è stato insegnato a scuola: inizi dalla colonna più a destra e sommi tutte le righe. Se la somma è maggiore del massimo numero a una cifra (che è in decimale 9, ma in binario è 1), il resto viene trasferito alla colonna successiva.
Ora, come noterai, quando aggiungi un numero negativo al suo numero positivo, la colonna più a destra che non è tutte le 0s avrà sempre due 1s, che una volta sommate comporteranno 2. La rappresentazione binaria di due essere 10, portiamo la 1colonna successiva e inseriamo un 0risultato nella prima colonna. Tutte le altre colonne a sinistra hanno solo una riga con a 1, quindi il 1riporto dalla colonna precedente si aggiungerà di nuovo a 2, che poi riporterà ... Questo processo si ripete fino a raggiungere la colonna più a sinistra, dove l' 1essere trasportato non ha nessun posto dove andare, quindi trabocca e si perde, e ci rimane 0tutto s.
Questo sistema si chiama Complemento 2 . Puoi leggere di più su questo qui:
Rappresentazione del complemento di 2 per numeri interi firmati .
Ora che il corso intensivo nel complemento di 2 è terminato, noterai che -1è l'unico numero la cui rappresentazione binaria è in 1tutto.
Utilizzando l' ~operatore NOT bit a bit, tutti i bit di un dato numero vengono invertiti. L'unico modo per tornare 0indietro dall'inversione di tutti i bit è se iniziamo con 1tutto.
Quindi, tutto questo era un modo prolisso di dire che ~ntornerà solo 0se lo nè -1.
in?