~ (按位非)
对每一个比特位执行非(NOT)操作。NOT a 结果为 a 的反转(即反码)。非操作的真值表:
9 (base 10) = 00000000000000000000000000001001 (base 2)
--------------------------------
~9 (base 10) = 11111111111111111111111111110110 (base 2) = -10 (base 10)
对任一数值 x 进行按位非操作的结果为 -(x + 1)。例如,~5 结果为 -6。
与 indexOf 一起使用示例:
//官方 DEMO
var str = 'rawr';
var searchFor = 'a';
// 这是 if (-1*str.indexOf('a') <= 0) 条件判断的另一种方法
if (~str.indexOf(searchFor)) {
// searchFor 包含在字符串中
} else {
// searchFor 不包含在字符串中
}
// (~str.indexOf(searchFor))的返回值
// r == -1
// a == -2
// w == -3
// 理解 步骤 举例解析
var index1 = 'rawr'.indexOf('r'); // 0
var index2 = 'rawr'.indexOf('a'); // 1
var index3 = 'rawr'.indexOf('w'); // 2
var index4 = 'rawr'.indexOf('z'); // -1 不存在
// 按位取反,套公式
~index1 = -(0+1); // -1
~index2 = -(1+1); // -2
~index3 = -(2+1); // -3
~index4 = -(-1+1); // 0
// 这时候再看上方的条件:
if(~str.indexOf(searchFor)){ // -1,-2,-3 ... 转换 boolean = true 存在
}else{ // 0 转换 boolean = false 不存在
}
// 如果存在不做操作,只操作不存在的情况,直接取 非(!) 就好了
if(!~str.indexOf(searchFor)){ // 0 转换 boolean = false 不存在
}
这是看插件源码的时候看见过别人用了 !~
这个符号,以前也没用过,查了查记录一下