var attr = ~’input,textarea’.indexOf( target.tagName.toLowerCase() ) ? ‘value’ : ‘innerHTML’
我在一个答案中看到了它,而我从未见过。
这是什么意思?
~是按位运算符,用于翻转其操作数中的所有位。
~
例如,如果您的数字为1,则其对IEEE754浮点数JavaScript如何处理数字的二进制表示将是…
1
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()正数相同)。
indexOf()
Math.floor()
我说不清楚,因为目前尚不清楚它的用途。通常,您希望您的代码与阅读它的其他人清楚地交流。虽然使用起来~可能 看起来很酷,但出于自身利益 考虑 ,通常太聪明了。:)
现在JavaScript具有Array.prototype.includes()和也不再相关String.prototype.includes()。这些返回布尔值。如果您的目标平台支持它,则应首选此方法来测试字符串或数组中是否存在值。
Array.prototype.includes()
String.prototype.includes()