如果您在jQuery inArray页面here上阅读注释,则会有一个有趣的声明:

!!~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的一部分-在JavaScript本身中是按位NOT运算符。

参见The Great Mystery of the Tilde(~)

您在实验中得到了奇怪的数字,因为您正在对整数执行按位逻辑运算(就我所知,整数可能存储为二进制补码或类似的数字...)

Two's complement解释了如何用二进制表示数字。我想我是对的。

10-05 18:00