究竟做了什么?

时间:2014-02-15 14:21:46

标签: javascript operators

我有时会在代码中看到符号~。我用~1尝试了它,它显示0。 因此,我可以看到一些代码使用这个技巧:

if ( !~text.indexOf('a') ){ }

检查真实价值。它有点变化吗?

3 个答案:

答案 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