Введіть свої значення в масив і перевірте, чи є ваш елемент у масиві:
if ([1, 2, 3, 4].includes(test.type)) {
// Do something
}
Якщо веб-переглядач, який ви підтримуєте, не має Array#includes
методу, ви можете використовувати цю поліфункцію .
Коротке пояснення ~
ярлика тильди:
Оновлення. Оскільки тепер у нас є 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
. Див. Вище). Зауважте, що під inArray
час обміну підписом методу PHP jQuery насправді імітує нативну 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
"s" по всій.
Отже, все це було довготривалим способом сказати, що ~n
повернеться лише 0
тоді, якщо n
є -1
.
in
?