Оператор побитового отрицания: ~
Побитовое отрицание возвращаемого значения (побитовое отрицание всех положительных целых чисел равно отрицательному значению самого себя + 1, побитовое отрицание всех отрицательных целых чисел является абсолютным значением самого себя + 1, а побитовое отрицание нуля равно -1. Среди них побитовая инверсия также принудительно возвращает возвращаемое значение, преобразуя строку 5 в число 5, а затем побитовую инверсию.Ложь преобразуется в 0, а истина преобразуется в 1.)
Одним словом: возвращаемое значение будет умножено на -1, а потом минус 1
~false === -1 ~true === -2
indexOf обычно возвращает -1, если значение не найдено, но у меня это просто работает здесь
const arr = [1,2,3] const index = arr.indexOf(4) if(!~index) { console.log('No index found') }
двойной битовый оператор ~~
Вместо положительных Math.floor( )
и отрицательных Math.ceil( )
можно использовать бинарные операторы. Преимущество битового оператора с двойным инвертированием состоит в том, что он выполняет ту же операцию быстрее.
Math.floor(4.9) === 4 //true // Abbreviated as: ~~4.9 === 4 //true
Обратите внимание, однако, что для положительных чисел ~~
результат Math.floor( )
and такой же, как и для отрицательных чисел Math.ceil( )
:
~~4.5 // 4 Math.floor(4.5) // 4 Math.ceil(4.5) // 5 ~~-4.5 // -4 Math.floor(-4.5) // -5 Math.ceil(-4.5) // -4
оператор правой смены ››
оператор выполняет операцию сдвига вправо со знаком. В отличие от операции сдвига влево, она сдвигает все значащие биты вправо в 32-битном числе и заполняет пробел значением знакового бита. Значения, превышенные во время перемещения, отбрасываются.
Например: Предположим, мы перемещаем один бит вправо, он на самом деле делится на 2, а затем округляется в меньшую сторону, если мы перемещаем 2 бита, он делится на 4 и округляется в меньшую сторону, и так далее, в любом случае, это 2 в n-й степени. власть.
4 >> 1 // 2 9 >> 1 // 4 15 >> 2 // 3
оператор сдвига влево ‹‹
То же, что и выше, здесь умножение, поэтому я не буду его объяснять.