到底做什么?
这个问题在这里已经有了答案:
它是按位运算符。 它会将操作数转换为32位整数,然后产生该整数的补码(反转每一位)。
最后!
当且仅当该操作的结果为0
才会返回true
。
一些例子可能有所帮助
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 ) { }
~
是按位否定运算符[MDN]。 它将其操作数转换为32位整数,并将所有1
s交换为0
s,并将所有0
s交换为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 === 0
和!0 === true
,而不是使用text.indexOf(str) !== -1)
。
~
是一元否定运算符。 基本上将操作数转换为32位整数,然后翻转整数的每一位。
~12 =
~(00000000 00000000 00000000 00001100) =
(11111111 11111111 11111111 11110011) =
-13
链接地址: http://www.djcxy.com/p/75045.html