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

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