Якщо ви читаєте коментарі в JQuery inArrayсторінці тут , є цікава заява:
!!~jQuery.inArray(elm, arr)
Тепер я вважаю, що подвійний знак оклику перетворить результат на тип booleanзі значенням true. Що я не розумію, так це те, що в усьому цьому використовується ~оператор tilde ( )?
var arr = ["one", "two", "three"];
if (jQuery.inArray("one", arr) > -1) { alert("Found"); }
Рефакторинг ifтвердження:
if (!!~jQuery.inArray("one", arr)) { alert("Found"); }
Зламатися:
jQuery.inArray("one", arr) // 0
~jQuery.inArray("one", arr) // -1 (why?)
!~jQuery.inArray("one", arr) // false
!!~jQuery.inArray("one", arr) // true
Також я помітив, що якщо поставити тильду попереду, результат буде -2.
~!!~jQuery.inArray("one", arr) // -2
Я не розумію мети тут тильди. Хтось може пояснити це чи вказати мені на ресурс?
~jQuery.inArray()насправді є дуже корисним - можливо, навіть дуже вагомою причиною того, чому функції пошуку повертаються -1до відмови (єдине значення, доповненням двох яких є хибність). Після того, як ви побачили і зрозуміли фокус, я відчуваю, що він навіть читабельніший != -1.
!!~ за що .
if (x != -1)і if (~x)для мене полягає в тому, що перший фактично виражає те, що ви маєте намір зробити. Останній виражає, що ви хочете зробити щось інше цілком ("будь-ласка, перетворіть мій 64-розрядний номер у 32-розрядне ціле число та перевірте, чи побітове НЕ це ціле число є істинним"), де ви просто отримаєте бажаний результат у цьому один випадок.