js中~符号的操作,像!~这种的简单运算,项目里边偶尔之间碰到了!~运算符,查了查记录一下

~ (按位非)

对每一个比特位执行非(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 不存在

}

这是看插件源码的时候看见过别人用了 !~ 这个符号,以前也没用过,查了查记录一下

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章