Поиск…
Вступление
Оператор ~ смотрит на двоичное представление значений выражения и выполняет на нем побитовое отрицание.
Любая цифра, которая равна 1 в выражении, становится 0 в результате. Любая цифра, которая является 0 в выражении, становится 1 в результате.
~ Целое число
Следующий пример иллюстрирует использование побитового оператора NOT (~) для целых чисел.
let number = 3;
let complement = ~number;
 Результат номера complement равен -4; 
| выражение | Двоичное значение | Десятичное значение | 
|---|---|---|
| 3 | 00000000 00000000 00000000 00000011 | 3 | 
| ~ 3 | 11111111 11111111 11111111 11111100 | -4 | 
 Чтобы упростить это, мы можем рассматривать его как функцию f(n) = -(n+1) . 
let a = ~-2; // a is now 1
let b = ~-1; // b is now 0
let c = ~0;  // c is now -1
let d = ~1;  // d is now -2
let e = ~2;  // e is now -3
~~ Оператор
 Double Tilde ~~ будет выполнять побитовое НЕ операцию дважды. 
Следующий пример иллюстрирует использование побитового оператора NOT (~~) для десятичных чисел.
 Чтобы сохранить простой пример, будет использоваться десятичное число 3.5 , что приведет к простому представлению в двоичном формате. 
let number = 3.5;
let complement = ~number;
 Результат номера complement равен -4; 
| выражение | Двоичное значение | Десятичное значение | 
|---|---|---|
| 3 | 00000000 00000000 00000000 00000011 | 3 | 
| ~~ 3 | 00000000 00000000 00000000 00000011 | 3 | 
| 3,5 | 00000000 00000011.1 | 3,5 | 
| ~~ 3,5 | 00000000 00000011 | 3 | 
 Чтобы упростить это, мы можем рассматривать его как функции f2(n) = -(-(n+1) + 1) и g2(n) = -(-(integer(n)+1) + 1) . 
f2 (n) оставит целое число как есть.
let a = ~~-2; // a is now -2
let b = ~~-1; // b is now -1
let c = ~~0;  // c is now 0
let d = ~~1;  // d is now 1
let e = ~~2;  // e is now 2
g2 (n) будет по существу округлять положительные числа вниз и отрицательные числа вверх.
let a = ~~-2.5; // a is now -2
let b = ~~-1.5; // b is now -1
let c = ~~0.5;  // c is now 0
let d = ~~1.5;  // d is now 1
let e = ~~2.5;  // e is now 2
Преобразование нечисловых значений в номера
 ~~ Может использоваться для нечисловых значений. Числовое выражение будет сначала преобразовано в число, а затем выполнено побитовое НЕ на нем. 
 Если выражение не может быть преобразовано в числовое значение, оно преобразуется в 0 . 
 true и false значения bool являются исключениями, где true представляется как числовое значение 1 и false как 0 
let a = ~~"-2";     // a is now -2
let b = ~~"1";      // b is now -1
let c = ~~"0";      // c is now 0
let d = ~~"true";   // d is now 0
let e = ~~"false";  // e is now 0
let f = ~~true;     // f is now 1
let g = ~~false;    // g is now 0
let h = ~~"";       // h is now 0
Shorthands
 Мы можем использовать ~ как сокращение в некоторых повседневных сценариях. 
 Мы знаем, что ~ преобразует -1 в 0 , поэтому мы можем использовать его с indexOf в массиве. 
индекс
let items = ['foo', 'bar', 'baz'];
let el = 'a';
if (items.indexOf('a') !== -1) {}
or
if (items.indexOf('a') >= 0) {}
могут быть переписаны как
if (~items.indexOf('a')) {}
~ Десятичный
Следующий пример иллюстрирует использование побитового оператора NOT (~) для десятичных чисел.
 Чтобы сохранить простой пример, будет использоваться десятичное число 3.5 , что приведет к простому представлению в двоичном формате. 
let number = 3.5;
let complement = ~number;
 Результат номера complement равен -4; 
| выражение | Двоичное значение | Десятичное значение | 
|---|---|---|
| 3,5 | 00000000 00000010.1 | 3,5 | 
| ~ 3,5 | 11111111 11111100 | -4 | 
 Чтобы упростить это, мы можем думать об этом как о функции f(n) = -(integer(n)+1) . 
let a = ~-2.5; // a is now 1
let b = ~-1.5; // b is now 0
let c = ~0.5;  // c is now -1
let d = ~1.5;  // c is now -2
let e = ~2.5;  // c is now -3