The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.

Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017

Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by koblay.yuriy, 2020-07-17 10:07:58

Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017

Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017

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 01 01 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 01 01
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 01 01

Если только вы не взаимодействуете с аппаратными средствами или не собирае­
тесь лучше узнавать, как числа представляются на компьютере, вам вряд ли приго­
дятся побитовые операторы (зачастую этот процесс игриво называют "жонглирова­
нием битами"). Один из не связанных с аппаратными средствами случаев их приме­
нения - это использование битов для эффективного хранения "флагов" (логических
значений).

Рассмотрим, например, установку прав доступа к файлу в системах Unix: на чте­
ние (read), на запись (write) и на выполнение (execute). Пользователь может задать
любую комбинацию этих трех параметров, что делает их идеальными для флагов.
Поскольку имеется три флага, необходимо три бита для хранения информации.

const FLAG READ 1 / / ObOOl

const FLAG WRITE 2 / / ОЬ01 0

const FLAG EXECUTE 4 / / ОЫ ОО

Используя побитовые операторы мы можем объединять, переключать и возвра­
щать значения отдельных флагов, которые хранятся в едином числовом значении.

l e t р = FLAG_READ 1 FLAG WRITE ; 1 1 ObO l l

l e t hasWrite = р & FLAG_WRITE ; 1 1 ОЬ01 0 - истина

l e t hasExecute = р & FLAG EXECUTE ; 1 1 оьооо - ложь

р р л FLAG_WRITE ; 1 1 ObOOl -- переключение флага wri t e

1 1 (теперь о н сброшен)

р р л FLAG WRITE ; 1 1 ObOl l -- переключение флага wri te

1 1 (теперь о н установлен)

1 1 мы можем определить значение даже нескольких флагов
11 с помощью одного выражения :

const hasRead.AndExecute = р & ( FLAG_READ 1 FLAG_EXECUTE ) ;

Обратите внимание, что для hasReadAndExecute мы должны были использовать
оператор группировки; у оператора AND приоритет более высокий, чем у OR, а нам
нужно было выполнить OR до AND.

Оператор typeof

Оператор typeof возвращает строку, представляющую тип его операнда. К со­
жалению, этот оператор не обеспечивает точного соответствия семи типам данных
JavaScript (undefined, nul l, логический, число, строка, символ и объект), что стапо
причиной бесконечной критики и затруднений.

У оператора t yp e o f есть одна причуда, которую обычно называют ошиб­
кой: t ypeof nul l возвращает " ob j ect " . Конечно, null - никакой не объект (это

Оператор группировки 121

базовый тип). Причины имеют исторический характер и не особенно интересны,
уже неоднократно предлагалось исправить это, но слишком много существующего
кода уже основано на таком поведении. В результате теперь это увековечено в спец­
ификации языка.

Оператор typeof нередко критикуют также за то, что он не способен отличить
объекты, не являющиеся массивами, от массивов. Он корректно идентифицирует
функции (также являющиеся объектами специальных типов), но результатом typeof
[ ] является 11obj ect 11 •

Возможные возвращаемые значения оператора typeof приведены в табл. 5.8.

Таблица 5.8. Возвращаемые значения оператора typeof

Выражение Возвращаемое значение Примечания
Прискорбно, но факт
Typeof undefined 11 unde f ined 11
Нововведение ЕSб
Typeof null 11obj ect 11
Typeof { } {} 11obj ect 11

Typeof t rue 11boolean11
11 nurnЬ e r 11
Typeof 1
Typeof 11 11 11string 11
Typeof SymЬol ( ) 11symЬol 11
Typeof funct ion ( ) " funct ion11

Поскольку typeof - оператор, крутлые скобки не обязательны. Таким
образом, если у вас есть переменная х, можете использовать синтаксис
typeof х вместо typeof ( х ) . Последнее - вполне допустимый син­
таксис - круглые скобки лишь создают ненужную группу выражений.

Оператор void

У оператора void есть только одна задача: вычислить свой операнд, а затем воз­
вратить undefined. Звучит не очень привлекательно? Да, согласен. Это применяется
для оценки выражения, в котором необходимо возвращаемое значение undefined,
но я никогда не встречался с такой ситуаций в реальной жизни. Единственная при­
чина, по которой я включил его в эту книгу, в том, что вы будете иногда встречать
его использование в URL дескриптора HTML <а>, чтобы помешать браузеру перейти
на новую страницу.

<а href= " j ava script : void О " >Ничего не делаем ! </а>

Это не рекомендуемый подход, но время от времени он встречается.

Операторы присваивания

Оператор присваивания прост: он назначает значение переменной. То, что на­
ходится слева от знака равенства (иногда называемое [-значением (lvalue)), должно

1 22 Глава 5. Выражения и операторы






















































Click to View FlipBook Version