~ 运算符查看表达式的二进制表示形式的值,并执行位非运算。
- 0转为二进制为00000000
- ~取反就是取0的补码
- 0的补码为11111111
- 11111111转为十进制为-1
- 所以
~0 = -1;
同理
- -1转为二进制为11111111
- ~取反就是取1的补码
- -1的补码为00000000
- 00000000转为十进制为0
- 所以
~-1 = 0;
用法: 因为-1的取反操作等于0,而其他数的取反操作不等于0。所以用indexOf操作符可以用~操作来判断某个字符串里是否有某个字符。
let str = '123456';
if(~str.indexOf(0)){
console.log('因为取反之后不为零,说明indexOf的结果不等于-1,所以表示str字符串里包含了对应字符')
} else {
console.log('说明取反之后为零,说明indexOf的结果等于-1,所以表示str字符串里不包含了对应字符')
}