当一个倾斜物出现在一个表情之前,它会做什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)
var attr = ~'input,textarea'.indexOf( target.tagName.toLowerCase() )
           ? 'value'
           : 'innerHTML'

我在回答中看到了,而且我以前从未见过。

提问于
用户回答回答于

~是位算子它翻转操作数中的所有位元。

例如,如果号码是1的二进制表示形式(JavaScript如何对待数字)将是。

0011 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

所以~将其操作数转换为32位整数(JavaScript中的按位运算符这样做).

0000 0000 0000 0000 0000 0000 0000 0001

如果它是一个负数,它将被存储在2的补码中:反转所有位并添加1。

1111 1111 1111 1111 1111 1111 1111 1110

那么,它有什么用呢?什么时候才能用呢?

它有很多用途。如果你写的是低级的东西,那很方便。如果分析了应用程序并发现了瓶颈,则可以通过使用按位技巧(作为一种方法)来提高它的性能。可能工具装在一个大得多的袋子里)。

这也是(一般)不清楚的戏法转向indexOf()发现返回值特鲁西(同时制作找不到虚妄),人们经常使用它作为将数字截断为32位的副作用(并将其小数位数增加一倍,实际上与Math.floor()关于正数)。

用户回答回答于

之前使用它。indexOf()表达式有效地给出了一个真实/错误的结果,而不是直接返回的数字索引。

如果返回值为-1,然后~-10因为-1是所有1位的字符串。任何大于或等于零的值都会给出一个非零的结果.。因此,

if (~someString.indexOf(something)) {
}

将导致if当“某事”出现在“SomeString”中时运行的代码。如果你想用.indexOf()作为一个直接的布尔值,这是行不通的,因为有时它返回零(当“某事”在字符串的开头时)。

当然,这也适用于:

if (someString.indexOf(something) >= 0) {
}

有时你也会看到这一点:

var i = ~~something;

使用~两次这样的运算符是将字符串转换为32位整数的一种快速方法。第一~转换,和第二个~ flips the bits back. Of course if the operator is applied to something that's cannot be converted to a number, you get NaN因此。编辑-实际上是第二个~这是首先应用的,但是你有了这个想法。)

扫码关注云+社区