Поместите ваши значения в массив и проверьте, находится ли ваш элемент в массиве:
if ([1, 2, 3, 4].includes(test.type)) {
// Do something
}
Если браузер, который вы поддерживаете, не имеет Array#includes
метода, вы можете использовать этот polyfill .
Краткое объяснение ~
ярлыка тильды:
Обновить: как у нас теперь есть includes
метод, нет смысла использовать ~
взломать больше. Просто оставьте это здесь для людей, которые заинтересованы в знании того, как это работает и / или столкнулись с этим в чужом коде.
Вместо проверки, если результат indexOf
есть >= 0
, есть хороший маленький ярлык:
if ( ~[1, 2, 3, 4].indexOf(test.type) ) {
// Do something
}
Вот скрипка: http://jsfiddle.net/HYJvK/
Как это работает? Если элемент найден в массиве, indexOf
возвращает его индекс. Если предмет не был найден, он вернется -1
. Не вдаваясь в подробности, ~
это побитовый оператор НЕ , который вернет0
только для -1
.
Мне нравится использовать ~
ярлык, поскольку он более лаконичен, чем сравнение возвращаемого значения. Хотелось бы, чтобы в JavaScript была in_array
функция, которая возвращала бы логическое значение напрямую (аналогично PHP), но это просто желаемое за действительное ( Обновление: теперь это происходит. Это называется includes
. Смотрите выше) Обратите внимание, что jQuery inArray
, разделяя сигнатуру метода PHP, фактически имитирует нативную indexOf
функциональность (которая полезна в разных случаях, если индекс - это то, что вам действительно нужно).
Важное примечание: использование ярлыка тильды, похоже, обернулось спорами, как некоторые яростно полагают, что код недостаточно ясен и его следует избегать любой ценой (см. Комментарии к этому ответу). Если вы разделяете их мнение, вы должны придерживаться .indexOf(...) >= 0
решения.
Немного более длинное объяснение:
Целые числа в JavaScript подписаны, что означает, что самый левый бит зарезервирован как бит знака; флаг, чтобы указать, является ли число положительным или отрицательным, с1
отрицательным.
Вот некоторые примеры положительных чисел в 32-битном двоичном формате:
1 : 00000000000000000000000000000001
2 : 00000000000000000000000000000010
3 : 00000000000000000000000000000011
15: 00000000000000000000000000001111
Теперь вот те самые цифры, но отрицательные:
-1 : 11111111111111111111111111111111
-2 : 11111111111111111111111111111110
-3 : 11111111111111111111111111111101
-15: 11111111111111111111111111110001
Почему такие странные комбинации для отрицательных чисел? Просто. Отрицательное число - это просто инверсия положительного числа + 1; добавление отрицательного числа к положительному числу должно всегда давать0
.
Чтобы понять это, давайте сделаем простую двоичную арифметику.
Вот как мы могли бы добавить -1
к +1
:
00000000000000000000000000000001 +1
+ 11111111111111111111111111111111 -1
-------------------------------------------
= 00000000000000000000000000000000 0
А вот как мы могли бы добавить -15
к +15
:
00000000000000000000000000001111 +15
+ 11111111111111111111111111110001 -15
--------------------------------------------
= 00000000000000000000000000000000 0
Как мы получаем эти результаты? Выполняя регулярное сложение, как нас учили в школе: вы начинаете с самого правого столбца и складываете все строки. Если сумма больше наибольшего однозначного числа (которое в десятичном виде 9
, но в двоичном1
), мы переносим остаток в следующий столбец.
Теперь, как вы заметите, при добавлении отрицательного числа к его положительному номеру, самый правый столбец, который не является всем 0
s, всегда будет иметь два 1
s, которые при сложении вместе приведут к 2
. Двоичное представление двух существ 10
, мы переносим в 1
следующий столбец и помещаем 0
результат в первый столбец. Все остальные столбцы слева имеют только одну строку с символом «a» 1
, поэтому перенос 1
из предыдущего столбца будет снова складываться 2
, что затем будет перенесено ... Этот процесс повторяется до тех пор, пока мы не доберемся до самого левого столбца, где « 1
Переносить» некуда, поэтому он переполняется и теряется, и мы остаемся со 0
всеми.
Эта система называется дополнением 2 . Вы можете прочитать больше об этом здесь:
Представление дополнения 2 для подписанных целых чисел .
Теперь, когда ускоренный курс в дополнении 2 закончен, вы заметите, что -1
это единственное число, двоичное представление которого1
повсюду.
Используя ~
побитовый оператор NOT, все биты в данном номере инвертируются. Единственный способ 0
вернуться от инвертирования всех битов, если мы начали с1
все сначала.
Итак, все это было многословным способом сказать, что ~n
вернется, только 0
если n
есть -1
.
in
?