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#includesmetody, możesz użyć tego wypełnienia .
Krótkie wyjaśnienie ~skrótu tyldy:
Aktualizacja: Ponieważ mamy teraz includesmetodę, 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, indexOfzwraca 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_arrayfunkcję, 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ą indexOffunkcjonalność (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(...) >= 0rozwią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 -1do +1:
00000000000000000000000000000001 +1
+ 11111111111111111111111111111111 -1
-------------------------------------------
= 00000000000000000000000000000000 0
A oto jak dodalibyśmy -15do +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 0s, zawsze będzie miała dwa 1s, co po dodaniu da w wyniku 2. Binarną reprezentację dwóch bytów 10przenosimy 1do następnej kolumny i umieszczamy jako 0wynik w pierwszej kolumnie. Wszystkie inne kolumny po lewej mają tylko jeden wiersz z literą a 1, więc 1przeniesione 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 1ma 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 -1jest 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 0powrotu do odwracania wszystkich bitów jest rozpoczęcie od1 wszystkich.
Więc to wszystko było rozwlekłym sposobem stwierdzenia, że ~npowróci tylko 0wtedy, gdy tak njest -1.
in?