Наконец, обратите внимание, что операторы
<b><=</b>
(меньше или равно) и
<b>>= </b>
(больше или равно) для определения «равенства» двух значений не используют операторы равенства или идентичности. Оператор «меньше или равно» определяется просто как «не больше», а оператор «больше или равно» - как «не меньше». Единственное исключение имеет место, когда один из операндов представляет собой значение
<b>NaN</b>
(или преобразуется в него). В этом случае все четыре оператора сравнения возвращают
<b>false</b>
.
4.9.3. Оператор in
Оператор
<b>in</b>
требует, чтобы левый операнд был строкой или мог быть преобразован в строку. Правым операндом должен быть объект. Результатом оператора будет значение
<b>true</b>
, если левое значение представляет собой имя свойства объекта, указанного справа. Например:
<b>var point = { х:1, у:1 }; // Определить объект</b>
<b>"х" in point // => true: объект имеет свойство с именем "х"</b>
<b>"z" in point // => false: объект не имеет свойства с именем "z"</b>
<b>"toString” in point // => true: объект наследует метод toString</b>
<b>var data = [7,8,9]; // Массив с элементами 0, 1 и 2</b>
<b>"0" in data // => true: массив содержит элемент "0"</b>
<b>1 in data // => true: числа преобразуются в строки</b>
<b>3 in data // => false: нет элемента 3</b>
4.9.4. Оператор instanceof
Оператор
<b>instanceof</b>
требует, чтобы левым операндом был объект, а правым - имя класса объектов. Результатом оператора будет значение
<b>true</b>
, если объект, указанный слева, является экземпляром класса, указанного справа. В противном случае результатом будет
<b>false</b>
. В главе 9 рассказывается, что классы объектов в языке JavaScript определяются инициализировавшей их функцией-конструктором. Следовательно, правый операнд оператора
<b>instanceof</b>
должен быть именем функции-конструктора. Например:
<b>var d = new Date(); // Создать новый объект с помощью конструктора Date()</b>
<b>d instanceof Date; // Вернет true; объект d был создан с функцией Date()</b>
<b>d instanceof Object; // Вернет true; все объекты являются экземплярами Object</b>
<b>d instanceof Number; // Вернет false; d не является объектом Number</b>
<b>var a = [1, 2, 3]; // Создать массив с помощью литерала массива</b>
<b>a instanceof Array; // Вернет true; а - это массив</b>
<b>a instanceof Object; // Вернет true; все массивы являются объектами</b>
<b>a instanceof RegExp;// Вернет false; массивы не являются регулярными выражениями</b>
Обратите внимание, что все объекты являются экземплярами класса
<b>Object</b>
. Определяя, является ли объект экземпляром класса, оператор
<b>instanceof</b>
принимает во внимание и «суперклассы». Если левый операнд
<b>instanceof</b>
не является объектом,
<b>instanceof</b>
возвращает
<b>false</b>
. Если правый операнд не является функцией, возбуждается исключение
<b>ТуреЕггог</b>
.
Чтобы понять, как действует оператор
<b>instanceof</b>
, необходимо познакомиться с таким понятием, как «цепочка прототипов». Это - механизм наследования в JavaScript; он описывается в разделе 6.2.2. Чтобы вычислить значение выражения
<b>о instanceof f</b>
, интерпретатор JavaScript определяет значение
<b>f.prototype</b>
и затем пытается отыскать это значение в цепочке прототипов объекта
<b>о</b>
. В случае успеха объект
<b>о</b>
считается экземпляром класса
<b>f</b>
(или суперкласса класса
<b>f</b>
), и оператор возвращает
<b>true</b>
. Если значение
<b>f.prototype</b>
отсутствует в цепочке прототипов объекта
<b>о</b>
, то объект
<b>о</b>
не является экземпляром класса
<b>f</b>
и оператор
<b>instanceof</b>
возвращает
<b>false</b>
.
4.10. Логические выражения
Логические операторы
<b>&&, ||</b>
и
<b>!</b>
используются для выполнения операций булевой алгебры и часто применяются в сочетании с операторами отношений для объединения двух выражений отношений в одно более сложное выражение. Эти операторы описываются в подразделах, следующих ниже. Чтобы понять, как они действуют, вам может потребоваться еще раз прочитать о концепции «истинности» и «ложности» значений в разделе 3.3.
4.10.1. Логическое И (&&)
Условно говоря, оператор
<b>&&</b>
действует на трех уровнях. На самом простом уровне, когда в операции участвуют логические операнды, оператор
<b>&&</b>
выполняет операцию «логическое И» над двумя значениями: он возвращает
<b>true</b>
тогда и только тогда, когда оба операнда имеют значение
<b>true</b>
. Если один или оба операнда имеют значение
<b>false</b>
, оператор возвращает
<b>false</b>
.