~ (按位非)
對每一個比特位執行非(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 不存在
}
這是看插件源碼的時候看見過別人用了 !~
這個符號,以前也沒用過,查了查記錄一下