Page 122 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 122
n++ 11 двоичный доп. код: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0
n >> 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1
n >>> 1 11 01 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1
Если только вы не взаимодействуете с аппаратными средствами или не собирае
тесь лучше узнавать, как числа представляются на компьютере, вам вряд ли приго
дятся побитовые операторы (зачастую этот процесс игриво называют "жонглирова
нием битами"). Один из не связанных с аппаратными средствами случаев их приме
нения - это использование битов для эффективного хранения "флагов" (логических
значений).
Рассмотрим, например, установку прав доступа к файлу в системах Unix: на чте
ние (read), на запись (write) и на выполнение (execute). Пользователь может задать
любую комбинацию этих трех параметров, что делает их идеальными для флагов.
Поскольку имеется три флага, необходимо три бита для хранения информации.
const FLAG READ 1 / / ObOOl
1
const FLAG WRITE 2 / / ОЬ0 0
const FLAG EXECUTE 4 / / ОЫ ОО
Используя побитовые операторы мы можем объединять, переключать и возвра
щать значения отдельных флагов, которые хранятся в едином числовом значении.
let р = FLAG_READ 1 FLAG WRITE ; 1 1 ObO l l
l e t hasWrite = р & FLAG_WRITE ; 11 ОЬ01 0 - истина
let hasExecute = р & FLAG EXECUTE ; 11 оьооо - ложь
р р л FLAG_WRITE ; 11 ObOOl -- переключение флага write
11 (теперь он сброшен)
р р л FLAG WRITE ; 11 ObOl l -- переключение флага write
11 (теперь он установлен)
1 1 мы можем определить значение даже нескольких флагов
11 с помощью одного выражения:
const hasRead.AndExecute = р & ( F LAG_READ 1 FLAG_EXECUTE ) ;
Обратите внимание, что для hasReadAndExecute мы должны были использовать
оператор группировки; у оператора AND приоритет более высокий, чем у OR, а нам
нужно было выполнить OR до AND.
Оператор typeof
Оператор typeof возвращает строку, представляющую тип его операнда. К со
жалению, этот оператор не обеспечивает точного соответствия семи типам данных
l
JavaScript (undefined, nu l , логический, число, строка, символ и объект), что стапо
причиной бесконечной критики и затруднений.
У оператора t y p e o f есть одна причуда, которую обычно называют ошиб
кой: y peof nu l возвращает " o b j ect" . Конечно, null - никакой не объект (это
l
t
Оператор группировки 121

