【问题标题】:What ~ does, and is is safe to use? [duplicate]什么〜,并且可以安全使用吗? [复制]
【发布时间】:2013-04-22 04:30:45
【问题描述】:

这将在稍后需要:elementStr = 'hello'

所以我正在开发一个 javascript 应用程序。在我的一个函数中,我有以下 if 语句:

if (elementStr.indexOf('#') !== 0) {
        //true
    } 

但我不喜欢 !== 部分,我觉得它不好看。所以我尝试了这个:

if (!elementStr.indexOf('#')) {
        //false
    } 

但是 indexOf() 不会返回未定义的但它总是返回一个数字。所以第一个 if 语句返回 true,因为 elementStr 在字符串的第一个位置没有“#”。但是第二个 if 语句返回 false,因为 indexOf 返回 -1 并且这不是“未定义”,但我们当然希望它像第一个示例一样返回 true。因为我们不想改变语句,我们只是想让它看起来更好。所以偶然我这样做了:

if (!~elementStr.indexOf('#')) {
    //true
} 

你猜怎么着,它奏效了。我试图找到关于那个标志的东西,它在 javascript 中的作用。但我什么也找不到。我正在玩它,我得到了以下结果:

if (!~~elementStr.indexOf('#')) {
    //false
} 

if (!~~~elementStr.indexOf('#')) {
    //true
} 

你可以每次都加~,语句boolean会一直变化。

现在有人可以解释一下它在这个示例中的作用,以及我是否可以安全地使用该标志?

【问题讨论】:

  • 如果我可以安全地使用那个标志——你不知道它的作用。很多人不知道它的作用。使用它会使代码比!== 干净得多。不要为此使用它。
  • Drat,我的意思是说“清楚”而不是“干净”。

标签: javascript


【解决方案1】:

Bitwise Operators

~a

对每个位执行 NOT 运算符。

例子:

9(以 10 为底)= 00000000000000000000000000001001(以 2 为底)

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

【讨论】:

  • 每种编程语言都有这些位运算符吗?
  • @Johnny 不,他们没有。
猜你喜欢
  • 2015-07-16
  • 2011-09-16
  • 2020-05-06
  • 2018-03-20
  • 2010-10-11
  • 2013-01-06
  • 2016-04-28
  • 2021-05-25
相关资源
最近更新 更多