到底做什么?

这个问题在这里已经有了答案:

  • 在表达式之前,代字号在做什么? 6个答案

  • 它是按位运算符。 它会将操作数转换为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

    上一篇: What exactly does ~ do?

    下一篇: What does ~fs.readdirSync mean in config files?