在JavaScript中,符号“~”代表按位取反运算符。

9

1
如答案所示,~是按位非运算符,因此该代码检查indexOf()的返回值是否为-1。在我看来,这不是一个好的做法,因为它是一种“技巧”,使得代码更难阅读和维护。 - nnnnnn
2个回答

9

如果你想知道为什么在那种情况下使用它,它是一个简写形式,用于查找indexOf方法是否发现了某些内容。

indexOf方法未找到任何内容时返回-1,找到时返回≥0。因此,当你执行~ -1时,你得到0(一个falsy值),当你对其他任何东西执行它时,你得到一个truthy值。

所以:

if( ~str.indexOf( "something" ) ) {
...
}

这是一个简短的说法

if( str.indexOf( "something" ) !== -1 ) {
...
}

如果您想知道为什么-1是0的NOT,那么请阅读这里

2
JavaScript标准是否要求以二进制补码形式存储数字?如果不是,那么这并不是一个很好的检查数字是否等于-1的方法。 - Seth Carnegie
@SethCarnegie Javascript中的数字存储为IEEE754双精度浮点数,但在进行位运算时会转换为有符号32位整数,然后再转换回来。我会为您找到一个参考资料。编辑:http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf第72页。 - Esailija
@Esailija,由于没有负索引,最好使用s.indexOf(...) < 0,因为这样更容易理解。 - Kijewski
1
@kay 是的,这样更容易理解。我并不是说我推荐这种做法。 - Esailija


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接