1. ~ 按位非
按位非会将数值的32位二进制的每一位取反。本质上取操作数的负值,然后减1
~20 === -21
使用场景
- 向下取整
~1.11 取负值然后减1为-2
~~1.11 取负值然后减1为1
- Array.indexOf()中的使用
Array.indexOf()查询不到会返回-1, 通过~-1取值为0,Boolean(0)的话则返回false。
var arr = [1,2,3]
if (~Array.indexOf(4)) {
//...
} else {
//...
}
2. & 按位与
按位与&, 本质上将两个操作数的32位二进制数的每一位对齐。然后按如下的规则取值,1 & 1 等于 1; 1 & 0 等于 0;0 & 1 等于0;0 & 0等于0。
3. | 按位或
按位与|, 本质上将两个操作数的32位二进制数的每一位对齐。然后按如下的规则取值,1 | 1 等于 1; 1 | 0 等于 1;0 | 1 等于1;0 | 0等于0。
使用场景
向下取整
-1|0 = -1
0|3 = 0