性能更佳,骚操作系列😁
| 符号 | 描述 | 规则 |
|---|---|---|
| & | 按位与 | 两位都为1才为1,不同为0 |
| | | 按位或 | 两位都为0才为0,不同为1 |
| ^ | 异或 | 相同为0,不同为1 |
| ~ | 取反 | 0变1,1变0 |
| << | 左移 | 二进制位向左移动,高位去掉,低位补0 |
| >> | 右移 | 二进制位向右移动,低位去掉,高位补0 |
~~ 取整操作
~~null // 0
~~undefined // 0
~~0 // 0
~~{} // 0
~~[] // 0
~~(1/0) // 0
~~'' // 0
~~'abc' // 0
~~false // 0
~~true // 1
~~1.2345 // 1
~~4.6 // 4
~~'4.6' // 4
~~' 4.6 ' // 4
~~'-4.6' // 4
~~(-2.6) // -2
~~(-2.4) // -2
使用指南:
- 对于非数字或非数字字符串,
~~的结果为0,布尔值的true是1 - 对于大于0的数字或数字字符串(允许左右带有空字符串),
~~相当于是Math.floor(取下整取) - 对于小于0的数字或数字字符串(允许左右带有空字符串),
~~相当于Math.ceil(取上取整)或者是-(Math.floor(Math.abs(val)))
+ 转数字类型
+new Date() // 1594268105568
+'1' // 1
使用指南:转数字类型,例如获取时间戳,字符串转数字类型
1<<n 取2的n次方
1<<1 // 2
1<<2 // 4
1<<0 // 1
1<<-1 // -2147483648
使用指南:表示取2的n次方,n为>=0的整数,如果为小数,则取整数部分
n & 1 判断奇偶数
3 & 1 // 1
2 & 1 // 0
使用指南:判断奇偶数。偶数二进制编码最低位为0,奇数的二进制编码最低位是1.奇数会得到1, 偶数会得到0
^ 交换两个数
a = 3, b = 5
a = a ^ b = 011 ^ 101 = 110
b = a ^ b = 110 ^ 101 = 011 = 3
a = a ^ b = 110 ^ 011 = 101 = 5
a = 5, b = 3
使用指南:使用异或运算符^交换两个数
>> 判断正负数
一个长度为1字节,8位的数字(数值范围:-128 ~ 256,计算 到
)
对于正整数来说,右移7位,可以得到0.
对于负整数来说,左移7位,可以得到-1
从而判断正负数
3 >> 7 = 0000 0011 >> 7 = 0000 0000 = 0
-3 >> 7 = 1000 0011(原) >> 7 = 1111 1101(补) >> 7 = 1111 1111(补) = 1000 0001(原) = -1