稍后将需要:elementStr = 'hello'
。
所以我正在开发一个javascript应用程序。在我的一个函数中,我有以下if语句:
if (elementStr.indexOf('#') !== 0) {
//true
}
但我不喜欢!==
部分对我来说不太好看。所以我尝试了这个:
if (!elementStr.indexOf('#')) {
//false
}
但indexOf()不会返回undefinied但它总是返回一个数字。所以第一个if语句返回true,因为elementStr
在字符串的第一位没有'#'。但是第二个if语句返回false,因为indexOf返回-1并且不是'undefined',但是我们希望它返回true,就像第一个例子一样。因为我们不想改变声明,所以我们只是想让它看起来更好。所以偶然我这样做了:
if (!~elementStr.indexOf('#')) {
//true
}
并且知道什么,它有效。我试图找到关于那个标志的东西,它在javascript中做了什么。但我找不到任何东西。我正在玩它,我得到了以下结果:
if (!~~elementStr.indexOf('#')) {
//false
}
if (!~~~elementStr.indexOf('#')) {
//true
}
你可以继续每次添加〜,语句boolean会一直改变。
现在有人可以解释一下我在这个例子中做了什么,如果我可以安全地使用那个标志吗?
答案 0 :(得分:3)
<强>〜一强>
在每个位上执行NOT运算符。
示例:
9(基数10)= 00000000000000000000000000001001(基数2)
~9(基数10)= 11111111111111111111111111110110(基数2)= -10(基数10)