在javascript中`~`意味着什么

gui*_* 桂林 9 javascript node.js

我查看了express的代码,看到这段代码 https://github.com/visionmedia/express/blob/master/lib/application.js#L490

if ('all' == envs || ~envs.indexOf(this.settings.env)) fn.call(this);
Run Code Online (Sandbox Code Playgroud)

~之前的意思是什么envs

Esa*_*ija 9

如果你想知道为什么在这种情况下使用它,它是一个简写,找出indexOf方法是否找到了什么.

indexOf当它没有找到某些东西时返回-1,当它没有时返回> = 0.所以当你做~~你得到0(一个假值),当你做任何其他事情时,你得到一个真正的价值.

所以:

if( ~str.indexOf( "something" ) ) {
...
}
Run Code Online (Sandbox Code Playgroud)

是一种较短的说法

if( str.indexOf( "something" ) !== -1 ) {
...
}
Run Code Online (Sandbox Code Playgroud)

如果你想知道如何-1是0的NOT,那么请阅读这里

  • Javascript标准是否要求以2的补码形式存储数字?如果没有,这实际上并不是一种检查数字是否等于-1的好方法. (2认同)