javascript - ~ 到底是做什么的?

标签 javascript operators

<分区>

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

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

检查真实值。是不是有点位移?

最佳答案

这是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 ) { }

关于javascript - ~ 到底是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21798737/

相关文章:

c++ - 什么时候在复杂表达式中评估后缀增量运算符?

c - "++"操作在 C 中是原子的吗?

c++ - 重载运算符%

javascript - 取消引用变量的闭包有用吗?

javascript - 将 json 转换为 jsonp 以将其用作回调

javascript - grunt 和 gulp 混淆 - 在另一个有 gulp 的项目中运行 gulp

logic - "!= true"和 "== false"之间的区别?

javascript - 如何生成模拟音频信号的随机数据?

javascript - e2e 测试 : Headless mode test passes, 常规模式失败

javascript - 为什么 ~ 运算符为 Javascript 中的函数返回 -1?