我有时会在代码中看到符号~
。我用~1
尝试了它,它显示0
。
因此,我可以看到一些代码使用这个技巧:
if ( !~text.indexOf('a') ){ }
检查真实价值。它有点变化吗?
答案 0 :(得分:3)
这是bitwise NOT operator。它会将操作数转换为32位整数,然后产生该整数的one's complement(反转每一位)。
最后,当{且仅当该操作的结果为!
时,true
将返回0
。
一些例子可能有所帮助:
x | x (bin) | ~x (bin) | ~x | !~x
-3 | 1111…1101 | 0000…0010 | 2 | false
-2 | 1111…1110 | 0000…0001 | 1 | false
-1 | 1111…1111 | 0000…0000 | 0 | true
0 | 0000…0000 | 1111…1111 | -1 | false
1 | 0000…0001 | 1111…1110 | -2 | false
换句话说,
if ( !~text.indexOf('a') ) { }
相当于:
if ( text.indexOf('a') == -1 ) { }
答案 1 :(得分:0)
~
是bitwise negation operator[MDN]。它将其操作数转换为32位整数,并将所有1
交换为0
s,将所有0
交换为1
s。
例如:
0000 0000 0000 0000 0000 0000 0000 0000 = 0
1111 1111 1111 1111 1111 1111 1111 1111 = ~0 = -1
而不是text.indexOf(str) !== -1)
,您可以使用棘手的!~text.indexOf(str)
,因为~1 === 0
和!0 === true
。
答案 2 :(得分:0)
~
是一元否定运算符。基本上将操作数转换为32位整数,然后翻转整数的每一位。
~12 =
~(00000000 00000000 00000000 00001100) =
(11111111 11111111 11111111 11110011) =
-13