我正在查看 SocketIO 源代码,它有这样的声明:
if (-~manager.get('blacklist').indexOf(packet.name)) {
这里的-~
简写是什么意思?
最佳答案
这似乎是一个技巧:
if(manager.get('blacklist').indexOf(packet.name) !== -1)
正如其他人所提到的,~
是按位取反,它将翻转二进制数字。例如,00000001
变为 11111110
,或者在十六进制中,0x01
变为 0xFE
。
-1
作为有符号整数 32,这是所有按位运算符返回的值(>>>
除外,它返回无符号整数 32)以十六进制表示为 0xFFFFFFFF
。 ~(-1)
翻转位以产生 0x00000000
,即 0
。
减号只是在数值上对数字取反。正如 zzzBov 提到的,在这种情况下它什么都不做。
-~(-1) === 0
和
~(-1) === 0
代码可以改成:
if(~manager.get('blacklist').indexOf(packet.name))
但是,在我看来,字符并没有那么重要,所以较长的版本(可以说更具可读性)会更好,或者实现 contains 方法会更好,这个版本最好留给执行此优化的 JavaScript 编译器或压缩器。
关于javascript - .indexOf() 之前的 -~ 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16614281/