Введение в операторы Javascript
Javascript — очень популярный язык благодаря своей красоте и простоте использования. С javascript легко начать работу. Но освоить этот язык очень сложно. Например, вы не знаете всех операторов JS. А вы знаете?
Типы операторов
В Javascript существует множество типов операторов.
Согласно MDN Web Docs это:
- Операторы присваивания
- Операторы сравнения
- Арифметические операторы
- Побитовые операторы
- Логические операторы
- Строковые операторы
- Условный/тернарный оператор
- Оператор запятой
- Унарные операторы
- Реляционные операторы
Теперь вы знаете большинство из них, поэтому я расскажу вам о самых неизвестных операторах.
1. Двоичные операторы сдвига
Если вы когда-либо кодировали на C/C++
, то, скорее всего, вы использовали или хотя бы слышали об операторах двоичного сдвига.
Двоичные операторы сдвига используются при работе с двоичной системой счисления. Возможно, именно по этой причине вы не знали о существовании этих операторов. Все
Эти операторы также существуют в Javascript. Это операторы Left Shift (<<
), Sign-propagating Right Shift (>>
) и Zero-fill Right Shift (>>>
) в JS.
Левый сдвиг (<<
)
Возьмем для примера число 212.
Javascript хранит числа в 64 битах.
Побитовые операторы используют 32 бита.
😅 Возможно, использование 32 бит — не самая лучшая идея. Поэтому будем работать с 16 битами
212 = 0000 0000 1101 0100
Теперь, если мы сделаем 212 << 1
, то это сдвинет 11010100
влево, добавив в конце 0
. Таким образом, получится 0000 0001 1010 1000
, что равно 424.
console.log(212 << 1); //Prints 424
console.log(123 << 2); //It Prints 492
/* You Can Try it Now in Your Browser's Developer Console */
Распространяющийся по знаку правый сдвиг (>>
)
Работает так же, как и предыдущий, но сдвигает биты вправо.
let a = 212; // 212 = 0000 0000 1101 0100
a = a >> 1; // 0000 0000 0110 1010 [106]
console.log(a); // 106
console.log(343 >> 2); //85 works like this too.
console.log(-132 >> 2); //-33
/*it keeps the sign, for which it is called "sign-propagating"*/
Сдвиг нулевого заполнения вправо (>>
)
Это то же самое, что и Sign-propagating Right Shift, с той лишь разницей, что он также сдвигает знаковый бит. По этой причине он работает одинаково в положительных числах, но дает другой результат в отрицательных числах.
console.log(343 >>> 2); //85 works same
console.log(-132 >>> 2); //1073741791 it doesn't work same as >>
Подробнее об этом можно прочитать в MDN Docs.
2. Бинарные побитовые операторы
Эти операторы снова используются в двоичных вычислениях. У нас есть побитовое AND (&
), побитовое OR (|
) и побитовое XOR (^
).
Все они вычисляют биты на каждом месте заданного числа.
0000 0001 0011 0100
0000 0100 0010 1001
Берется верхняя цифра и нижняя цифра в одном и том же месте. И вычисляется в соответствии с оператором. Они вычисляются по правилам булевой алгебры.
Like For AND (&
)
0 & 0 = 0
1 & 0 = 0
0 & 1 = 0
1 & 1 = 1
Для OR (|
)
0 | 0 = 0
1 | 0 = 1
0 | 1 = 1
1 | 1 = 1
Для XOR (^
)
0 ^ 0 = 0
1 ^ 0 = 1
0 ^ 1 = 1
1 ^ 1 = 0
После этих вычислений мы получаем :
let a = 15; //1111
let b = 9; //1001
console.log(a & b); // 1111 & 1001 = 1001 (9)
console.log(a | b); // 1111 | 1001 = 1111 (15)
console.log(a ^ b); // 1111 ^ 1001 = 0110 (6)
3. Побитовый оператор Not
Оператор Bitwise Not (~
) изменяет 1
на 0
и наоборот для любого заданного числа. Изменяет все 32 бита.
let a = 12; //1100
console.log(~a); //(-13)
/*
You Expected 1100 to be 0011 but after altering all 32 bits we get
1111 1111 ... 1111 0011
which is -13
*/
Заключение
Все эти неизвестные операторы взяты из двоичной системы. Поэтому в данный момент это хороший повод изучить двоичную систему. Ведь двоичная система — это то, что делает возможным существование компьютеров.
Надеюсь, вам понравилась моя первая запись в блоге.
Увидимся позже.
Пока 👋