inArray
页面这里的评论,会发现一个有趣的声明:!!~jQuery.inArray(elm, arr)
我相信两个感叹号会将结果转换为boolean
类型,并具有 true
的值。但我不明白在这一过程中波浪号 (~
) 运算符的作用是什么?
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
(唯一一个二进制补码为false的值)的非常好的原因。一旦你看到并理解了这个技巧,我认为它比!= -1
更易读。 - Amadan!!~
。 - Kirk Wollif (x != -1)
和if (~x)
的主要区别在于前者实际上表达了你打算做什么,而后者表达的是你想要完全做另一件事情(“请将我的64位数字转换成32位整数,并检查该整数的按位取反是否为真”),只是恰巧在这种情况下获得了所需的结果。 - JimmiTh