Javascript -~before.indexOf()是什么意思?

Javascript -~before.indexOf()是什么意思?,javascript,shorthand,Javascript,Shorthand,我正在查看SocketIO源代码,它有以下声明: if (-~manager.get('blacklist').indexOf(packet.name)) { -~这里的速记是什么意思?按位反转 ~0 == 0xFFFFFFFF == -1 ~1 == 0xFFFFFFFE 负数是算术倒数。所以,如果indexOf失败,结果是0(返回-1)这似乎是一个技巧: if(manager.get('blacklist').indexOf(packet.name) !== -1) 正如其他人提到的~

我正在查看SocketIO源代码,它有以下声明:

if (-~manager.get('blacklist').indexOf(packet.name)) {
-~
这里的速记是什么意思?

按位反转

~0 == 0xFFFFFFFF == -1
~1 == 0xFFFFFFFE

负数是算术倒数。所以,如果indexOf失败,结果是0(返回-1)

这似乎是一个技巧:

if(manager.get('blacklist').indexOf(packet.name) !== -1)
正如其他人提到的
~
是按位求反,它将翻转二进制数字<例如,code>00000001变成
11111110
,或者在十六进制中,
0x01
变成
0xFE

-1
作为带符号的int 32,这是所有位运算符返回的值(除了返回无符号int 32的
>
之外),用十六进制表示为
0xffffff
~-1
翻转位以产生
0x00000000
,即
0

负号只是在数字上对数字求反。正如Zzbov所提到的,在这种情况下,它什么也不做

-~(-1) === 0

代码可以更改为:

if(~manager.get('blacklist').indexOf(packet.name))

但是,在我看来,字符并没有那么昂贵,所以可以说更可读的较长版本会更好,或者实现contains方法会更好,此版本最好留给JavaScript编译器或压缩器来执行此优化。

这两个运算符不是任何东西的简写形式
~
是位求反,
-
是标准求反

。由于结果用于
if
语句中,因此紧跟其后的
-
符号完全没有用处,不会产生任何后果

-~
合在一起是将
1
添加到数字中的一种方法。它通常不有用,最好用
+1

表示,它不是“速记”,而是一行两个运算符(
-
~
)。
if(~manager.get('blacklist').indexOf(packet.name))