小编典典

波浪号在表达式之前会做什么?

javascript

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

我在一个答案中看到了它,而我从未见过。

这是什么意思?


阅读 420

收藏
2020-04-25

共1个答案

小编典典

~是按位运算符,用于翻转其操作数中的所有位。

例如,如果您的数字为1,则其对IEEE754浮点数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()的发现返回值放入truthy(同时使未找到为 falsy)人们通常会增加一倍它用它截断数字为32位(和丢弃其小数代替它的副作用,实际上与Math.floor()正数相同)。

我说不清楚,因为目前尚不清楚它的用途。通常,您希望您的代码与阅读它的其他人清楚地交流。虽然使用起来~可能 看起来很酷,但出于自身利益 考虑 ,通常太聪明了。:)

现在JavaScript具有Array.prototype.includes()和也不再相关String.prototype.includes()。这些返回布尔值。如果您的目标平台支持它,则应首选此方法来测试字符串或数组中是否存在值。

2020-04-25