我查看了express的代码,并看到了这段代码https://github.com/visionmedia/express/blob/master/lib/application.js#L490
if ('all' == envs || ~envs.indexOf(this.settings.env)) fn.call(this);
在“envs”之前,“~”表示用户主目录的路径。
我查看了express的代码,并看到了这段代码https://github.com/visionmedia/express/blob/master/lib/application.js#L490
if ('all' == envs || ~envs.indexOf(this.settings.env)) fn.call(this);
如果你想知道为什么在那种情况下使用它,它是一个简写形式,用于查找indexOf
方法是否发现了某些内容。
indexOf
方法未找到任何内容时返回-1,找到时返回≥0。因此,当你执行~ -1时,你得到0(一个falsy值),当你对其他任何东西执行它时,你得到一个truthy值。
所以:
if( ~str.indexOf( "something" ) ) {
...
}
这是一个简短的说法
if( str.indexOf( "something" ) !== -1 ) {
...
}
s.indexOf(...) < 0
,因为这样更容易理解。 - Kijewski
~
是按位非运算符,因此该代码检查indexOf()
的返回值是否为-1。在我看来,这不是一个好的做法,因为它是一种“技巧”,使得代码更难阅读和维护。 - nnnnnn