3 回答
TA贡献1836条经验 获得超3个赞
波浪形运算符实际上并不是jQuery的一部分 - 它本身就是JavaScript中的一个NOT运算符。
参见蒂尔德的神秘之处(〜)。
您在实验中得到了奇怪的数字,因为您正在对整数执行按位逻辑运算(据我所知,可能存储为两个补码或类似的东西......)
两个补码解释了如何用二进制表示数字。我想我是对的。
TA贡献1796条经验 获得超10个赞
!!~expr计算结果为false,当expr为-1,否则true。
它是一样的expr != -1,只有破碎的*
它的工作原理是JavaScript按位运算将操作数转换为二进制补码格式的32位有符号整数。因此!!~-1评估如下:
-1 = 1111 1111 1111 1111 1111 1111 1111 1111b // two's complement representation of -1
~-1 = 0000 0000 0000 0000 0000 0000 0000 0000b // ~ is bitwise not (invert all bits)
!0 = true // ! is logical not (true for falsy)
!true = false // duh
除了-1将至少一个位设置为零之外的值; 颠倒它将创造一个真正的价值; 将!运算符两次应用于truthy值返回boolean true。
使用时.indexOf(),我们只想检查结果是否-1:
!!~"abc".indexOf("d") // indexOf() returns -1, the expression evaluates to false
!!~"abc".indexOf("a") // indexOf() returns 0, the expression evaluates to true
!!~"abc".indexOf("b") // indexOf() returns 1, the expression evaluates to true
* !!~8589934591评估为假,所以这个厌恶不能可靠地用于测试-1。
添加回答
举报