做什么,是否安全使用?

时间:2013-04-28 12:30:35

标签: javascript

稍后将需要: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会一直改变。

现在有人可以解释一下我在这个例子中做了什么,如果我可以安全地使用那个标志吗?

1 个答案:

答案 0 :(得分:3)

Bitwise Operators

  

<强>〜一

     

在每个位上执行NOT运算符。

示例:

  

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

     

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