Umieść swoje wartości w tablicy i sprawdź, czy pozycja znajduje się w tablicy:
if ([1, 2, 3, 4].includes(test.type)) {
// Do something
}
Jeśli obsługiwana przeglądarka nie ma tej Array#includes
metody, możesz użyć tego wypełnienia .
Krótkie wyjaśnienie ~
skrótu tyldy:
Aktualizacja: Ponieważ mamy teraz includes
metodę, nie ma już sensu używać ~
hackowania. Po prostu zachowaj to tutaj dla ludzi, którzy są zainteresowani wiedzą, jak to działa i / lub napotkali to w kodzie innych.
Zamiast sprawdzać, czy wynik indexOf
jest >= 0
, istnieje ładny mały skrót:
if ( ~[1, 2, 3, 4].indexOf(test.type) ) {
// Do something
}
Oto skrzypce: http://jsfiddle.net/HYJvK/
Jak to działa? Jeśli element zostanie znaleziony w tablicy, indexOf
zwraca jego indeks. Jeśli przedmiot nie został znaleziony, wróci -1
. Bez wchodzenia w zbyt wiele szczegółów ~
jest operatorem bitowym NOT , który zwróci0
tylko dla -1
.
Lubię używać ~
skrótu, ponieważ jest bardziej zwięzły niż porównanie wartości zwracanej. Chciałbym, żeby JavaScript miał in_array
funkcję, która zwraca bezpośrednio wartość logiczną (podobną do PHP), ale to tylko pobożne życzenia ( aktualizacja: teraz ma. Nazywa się includes
. Patrz powyżej). Zauważ, że jQuery inArray
, podczas udostępniania sygnatury metody PHP, w rzeczywistości naśladuje natywną indexOf
funkcjonalność (co jest przydatne w różnych przypadkach, jeśli indeks jest tym, czego naprawdę szukasz).
Ważna uwaga: używanie skrótu tyldy wydaje się być przedmiotem kontrowersji, jak niektórzy zaciekle uważają, że kod nie jest wystarczająco jasny i należy go unikać za wszelką cenę (patrz komentarze do tej odpowiedzi). Jeśli podzielasz ich zdanie, powinieneś trzymać się .indexOf(...) >= 0
rozwiązania.
Trochę dłuższe wyjaśnienie:
Liczby całkowite w JavaScript są podpisywane, co oznacza, że skrajny lewy bit jest zarezerwowany jako bit znaku; flaga wskazująca, czy liczba jest dodatnia czy ujemna, z a1
czym jest ujemna.
Oto kilka przykładowych liczb dodatnich w 32-bitowym formacie binarnym:
1 : 00000000000000000000000000000001
2 : 00000000000000000000000000000010
3 : 00000000000000000000000000000011
15: 00000000000000000000000000001111
Oto te same liczby, ale ujemne:
-1 : 11111111111111111111111111111111
-2 : 11111111111111111111111111111110
-3 : 11111111111111111111111111111101
-15: 11111111111111111111111111110001
Skąd takie dziwne kombinacje liczb ujemnych? Prosty. Liczba ujemna jest po prostu odwrotnością liczby dodatniej + 1; dodanie liczby ujemnej do liczby dodatniej powinno zawsze dawać0
.
Aby to zrozumieć, zróbmy prostą arytmetykę binarną.
Oto, jak dodalibyśmy -1
do +1
:
00000000000000000000000000000001 +1
+ 11111111111111111111111111111111 -1
-------------------------------------------
= 00000000000000000000000000000000 0
A oto jak dodalibyśmy -15
do +15
:
00000000000000000000000000001111 +15
+ 11111111111111111111111111110001 -15
--------------------------------------------
= 00000000000000000000000000000000 0
Jak otrzymujemy te wyniki? Robiąc regularne dodawanie, tak jak nas uczono w szkole: zaczynasz od skrajnej prawej kolumny i dodajesz wszystkie wiersze. Jeśli suma jest większa niż największa liczba jednocyfrowa (która w systemie dziesiętnym to 9
, ale w systemie dwójkowym to1
), resztę przenosimy do następnej kolumny.
Teraz, jak zauważysz, po dodaniu liczby ujemnej do jej liczby dodatniej, skrajna prawa kolumna, która nie zawiera wszystkich 0
s, zawsze będzie miała dwa 1
s, co po dodaniu da w wyniku 2
. Binarną reprezentację dwóch bytów 10
przenosimy 1
do następnej kolumny i umieszczamy jako 0
wynik w pierwszej kolumnie. Wszystkie inne kolumny po lewej mają tylko jeden wiersz z literą a 1
, więc 1
przeniesione z poprzedniej kolumny ponownie sumują się do 2
, co następnie przenosi ... Ten proces powtarza się, aż dojdziemy do skrajnej lewej kolumny, gdzie to, co 1
ma zostać przeniesione, nie ma dokąd pójść, więc przepełnia się i gubi, a my zostajemy z nami0
s na całej długości.
Ten system nazywa się dopełnieniem 2 . Możesz przeczytać więcej na ten temat tutaj:
Reprezentacja uzupełnienia 2 dla podpisanych liczb całkowitych .
Teraz, gdy błyskawiczny kurs dopełniania 2 się skończył, zauważysz, że -1
jest to jedyna liczba, której reprezentacja binarna to1
całą szerokość.
Używając ~
bitowego operatora NOT, wszystkie bity w danej liczbie są odwracane. Jedynym sposobem 0
powrotu do odwracania wszystkich bitów jest rozpoczęcie od1
wszystkich.
Więc to wszystko było rozwlekłym sposobem stwierdzenia, że ~n
powróci tylko 0
wtedy, gdy tak n
jest -1
.
in
?