当波浪号出现在表达式之前时,它有什么作用?

2024-03-06

var attr = ~'input,textarea'.indexOf( target.tagName.toLowerCase() )
           ? 'value'
           : 'innerHTML'

我在一个答案里看到过,以前没见过。

这是什么意思?


~ is a 翻转其操作数中的所有位。

例如,如果您的电话号码是1,其二进制表示IEEE 754 浮点 https://en.wikipedia.org/wiki/IEEE_754-1985(JavaScript 如何处理数字)将是...

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

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

0000 0000 0000 0000 0000 0000 0000 0001

If it were a negative number, it'd be stored in 2's complement: invert all bits and add 1.

...然后翻转其所有位...

1111 1111 1111 1111 1111 1111 1111 1110

那么它有什么用呢?什么时候可以使用它?

它有很多用途。如果您正在编写低级内容,那么它会很方便。如果您分析了应用程序并发现了瓶颈,则可以通过使用按位技巧(如possible工具放在一个更大的袋子里)。

这也是(通常)不清楚的trick转动indexOf()'s found返回值到truthy(在制作时未找到 as falsy),人们经常使用它,因为它有将数字截断为 32 位的副作用(并通过将其加倍来去掉小数位,实际上与Math.floor()对于正数)。

I say unclear因为它的用途并不是很明显。一般来说,您希望您的代码能够与阅读它的其他人清晰地沟通。使用时~ may 看起来不错,它通常太聪明了。 :)

现在 JavaScript 已经不再那么重要了Array.prototype.includes() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes and String.prototype.includes() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes。它们返回一个布尔值。如果您的目标平台支持它,您应该更喜欢用它来测试字符串或数组中是否存在值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当波浪号出现在表达式之前时,它有什么作用? 的相关文章

随机推荐