javascript函数中〜的含义

时间:2014-04-30 13:54:38

标签: javascript node.js

我正在阅读这个javascript函数:

if (~['bacon', 'burger'].indexOf(type)) {
    this.res.writeHead(200, { 'Content-Type': 'text/plain' });
    this.res.end('Serving ' + type + ' sandwich!\n');
  }

但是我不确定当我使用它时有什么意思~知道什么意思?

4 个答案:

答案 0 :(得分:9)

~是按位NOT运算符。它会切换一个数字的每一位。

  • 0变为-1
  • -1变为0
  • 没有其他数字变为零。

这意味着

if (~['bacon', 'burger'].indexOf(type)) {

是一种令人困惑的写作方式

if (['bacon', 'burger'].indexOf(type) == -1) {

indexOf在找不到字符串时返回-1

答案 1 :(得分:3)

~ is a Bitwise NOT operator...

Read more

答案 2 :(得分:2)

在这种情况下,~允许该代码将.indexOf()的返回值 - 一个表示数组中搜索值的位置的数字 - 转换为布尔值。换句话说,它需要"其中值是"结果并将其转换为"是列表中的值"结果

如何?好吧,.indexOf()在找不到值时返回-1,如果是,则返回大于或等于零的数字。 ~运算符将其数字参数转换为32位整数,然后反转每一位。该过程恰好将-1变为0,将任何正整数变为某些负非零值,将0变为-1。当这些结果随后被检查为布尔值时,原始-1将为false(因为0是" falsy")而大于或等于零的整数将为true(因为它们全部转换为某些非零值)。

答案 3 :(得分:-1)

按位NOT(~a)反转其操作数的位。

实施例

  • 9(基数10)= 00000000000000000000000000001001(基数2)

           --------------------------------
    
  • ~9(基数10)= 11111111111111111111111111110110(基数2)= -10(基数 10)

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators