Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание
- Название:JavaScript. Подробное руководство, 6-е издание
- Автор:
- Жанр:
- Издательство:Символ-Плюс
- Год:2012
- Город:СПб
- ISBN:978-5-93286-215-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание краткое содержание
Эта книга - одновременно и руководство программиста, и полноценный справочник по базовому языку JavaScript и клиентским прикладным интерфейсам, предоставляемым веб-броузерами.
JavaScript. Подробное руководство, 6-е издание - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Сдвиг вправо с заполнением нулями (>>>)
Оператор >>>
аналогичен оператору », за исключением того, что при сдвиге старшие разряды заполняются нулями, независимо от знака первого операнда. Например, выражение -1 >>> 4
даст в результате -1, а выражение -1 >>> 4
даст в результате 0x0FFFFFFF.
4.9. Выражения отношений
В этом разделе описаны операторы отношения в языке JavaScript. Это операторы проверяют отношение между двумя значениями (такое как «равно», «меньше» или «является ли свойством») и возвращают true или false в зависимости от того, как соотносятся операнды. Выражения отношений всегда возвращают логические значения, и эти значения чаще всего применяются в инструкциях if, while
и for
для управления ходом исполнения программы (глава 5). В следующих подразделах описываются операторы равенства и неравенства, операторы сравнения и два других оператора отношений, in
и instanceof
.
4.9.1. Операторы равенства и неравенства
Операторы ==
и ===
проверяют два значения на совпадение, используя два разных определения совпадения. Оба оператора принимают операнды любого типа и возвращают true
, если их операнды совпадают, и false
, если они различны. Оператор ===
, известный как оператор идентичности, проверяет два операнда на «идентичность», руководствуясь строгим определением совпадения. Оператор ==
, оператор равенства, проверяет, равны ли два его операнда в соответствии с менее строгим определением совпадения, допускающим преобразования типов.
В языке JavaScript поддерживаются операторы =
, ==
и ===
. Убедитесь, что вы понимаете разницу между операторами присваивания, равенства и идентичности. Будьте внимательны и применяйте правильные операторы при разработке своих программ! Очень заманчиво назвать все три оператора «равно», но во избежание путаницы лучше читать оператор =
как «получается», или «присваивается», оператор ==
читать как «равно», а словом «идентично» обозначать оператор ===
.
Операторы !=
и !==
выполняют проверки в точности противоположные операторам ==
и ===
. Оператор неравнства !=
возвращает значение false
если два значения равны друг другу в том смысле, в каком они считаются равными оператором ==
, и true в противном случае. Как будет рассказываться в разделе 4.10, оператор !
выполняет логическую операцию НЕ. Отсюда легко будет запомнить, что операторы !=
и ! ==
означают «не равно» и «не идентично».
Как отмечалось в разделе 3.7, объекты в языке JavaScript сравниваются по ссылке, а не по значению. Это значит, что объект равен только сам себе и не равен никакому другому объекту. Даже если два различных объекта обладают одним и тем же набором свойств, с теми же именами и значениями, они все равно будут считаться неравными. Два массива никогда не могут быть равными, даже если они содержат одинаковые элементы, следующие в одном порядке.
Оператор идентичности ===
вычисляет значения своих операндов, а затем сравнивает два значения, без преобразования типов, руководствуется следующими правилами:
• Если два значения имеют различные типы, они не идентичны.
• Если оба операнда являются значением null
или undefined
, они идентичны.
• Если оба операнда являются логическим значением true
или оба являются логическим значением false
, они идентичны.
• Если одно или оба значения являются значением NaN
, они не идентичны. Значение NaN
никогда не бывает идентичным никакому значению, даже самому себе! Чтобы проверить, является ли значение х значением NaN
, следует использовать выражение х !== х
. Значение NaN
- единственное, для которого такая проверка вернет true
.
• Если оба значения являются числами с одним и тем же значением, они идентичны. Если один операнд имеет значение 0, а другой -0, они также идентичны.
• Если оба значения являются строками и содержат одни и те же 16-битные значения (подробности во врезке в разделе 3.2) в одинаковых позициях, они идентичны. Если строки отличаются длиной или содержимым, они не идентичны. Две строки могут иметь один и тот же смысл и одинаково выглядеть на экране, но содержать отличающиеся последовательности 16-битных значений. Интерпретатор JavaScript не выполняет нормализацию символов Юникода, поэтому подобные пары строк не считаются операторами ===
и ==
ни равными, ни идентичными. Другой способ сравнения строк обсуждается в части III книги, в описании метода String.localeCompare().
• Если оба значения ссылаются на один и тот же объект, массив или функцию, то они идентичны. Если они ссылаются на различные объекты (массивы или функции), они не идентичны, даже если оба объекта имеют идентичные свойства.
Оператор равенства ==
похож на оператор идентичности, но он использует менее строгие правила. Если значения операндов имеют разные типы, он выполняет преобразование типов и пытается выполнить сравнение:
• Если два значения имеют одинаковый тип, они проверяются на идентичность, как было описано выше. Если значения идентичны, они равны; если они не идентичны, они не равны.
• Если два значения не относятся к одному и тому же типу, оператор ==
все же может счесть их равными. При этом используются следующие правила и преобразования типов:
• Если одно значение null
, а другое - undefined
, то они равны.
• Если одно значение является числом, а другое - строкой, то строка преобразуется в число и выполняется сравнение с преобразованным значением!
• Если какое-либо значение равно true
, оно преобразуется в 1 и сравнение выполняется снова. Если какое-либо значение равно false
, оно преобразуется в 0 и сравнение выполняется снова.
• Если одно из значений является объектом, а другое - числом или строкой, объект преобразуется в простой тип (как описывалось в разделе 3.8.3) и сравнение выполняется снова. Объект преобразуется в значение простого типа либо с помощью своего метода toString()
, либо с помощью своего метода valueOf()
. Встроенные классы базового языка JavaScript сначала пытаются выполнить преобразование valueOf()
, а затем toString()
, кроме класса Date
, который всегда выполняет преобразование toString()
. Объекты, не являющиеся частью базового JavaScript, могут преобразовывать себя в значения простых типов способом, определенным их реализацией.
Интервал:
Закладка: