Введіть свої значення в масив і перевірте, чи є ваш елемент у масиві:
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), решту переносимо на наступний стовпець.
Тепер, як ви помітите, додаючи від'ємне число до його додатного числа, найправіший стовпець, який не є всім 0s, завжди матиме два 1s, що при додаванні разом призведе до 2. Двійкове представлення двох істот 10ми переносимо 1до наступного стовпця і ставимо а 0для результату в перший стовпець. Усі інші стовпчики зліва мають лише один рядок із символом a 1, тому 1перенесений з попереднього стовпця знову буде додано до 2, який потім перенесе ... Цей процес повторюється, поки ми не потрапимо до самого лівого стовпця, де 1, перенесена нікуди йти, тому він переповнюється і втрачається, і ми залишилися з 0все , поперечником.
Ця система називається доповненням 2 . Детальніше про це ви можете прочитати тут:
Представлення додатка 2 для підписаних цілих осіб .
Тепер, коли курс завершення в додатку 2 закінчено, ви помітите, що -1це єдине число, чиє бінарне представлення 1по всьому.
Використовуючи ~побітовий оператор NOT, всі біти в заданому номері інвертуються. Єдиний спосіб 0повернутися з інвертування всіх бітів - це якщо ми почали з 1"s" по всій.
Отже, все це було довготривалим способом сказати, що ~nповернеться лише 0тоді, якщо nє -1.
in?