ビット反転演算子(~)でindexOfの判定

nodeのqsモジュールのコード読んでたらよくわからん書き方があった。

if (~key.indexOf(']')) {
  ...
}

って感じだったんだけど、チルダってなんだっけと思って。

チルダはビット反転演算子で、整数をビット反転させると符号を反転させて1引いた数になる。こんな感じ。

console.log(~-4); // 3
console.log(~-3); // 2
console.log(~-2); // 1
console.log(~-1); // 0
console.log(~0);  // -1
console.log(~1);  // -2
console.log(~2);  // -3
console.log(~3);  // -4
console.log(~4);  // -5

つまり-1のときだけ0になるので、indexOfと組み合わせるとあんな感じに書けるというわけみたい。