JavaScript. Подробное руководство, 6-е издание, стр. 40

Наконец, обратите внимание, что операторы

<b>&lt;=</b>
(меньше или равно) и
<b>&gt;= </b>
(больше или равно) для определения «равенства» двух значений не используют операторы равенства или идентичности. Оператор «меньше или равно» определяется просто как «не больше», а оператор «больше или равно» - как «не меньше». Единственное исключение имеет место, когда один из операндов представляет собой значение
<b>NaN</b>
(или преобразуется в него). В этом случае все четыре оператора сравнения возвращают
<b>false</b>
.

4.9.3. Оператор in

Оператор

<b>in</b>
требует, чтобы левый операнд был строкой или мог быть преобразован в строку. Правым операндом должен быть объект. Результатом оператора будет значение
<b>true</b>
, если левое значение представляет собой имя свойства объекта, указанного справа. Например:

<b>var point = { х:1, у:1 }; // Определить объект</b>

<b>&quot;х&quot; in point // =&gt; true: объект имеет свойство с именем &quot;х&quot;</b>

<b>&quot;z&quot; in point // =&gt; false: объект не имеет свойства с именем &quot;z&quot;</b>

<b>&quot;toString” in point // =&gt; true: объект наследует метод toString</b>

<b>var data = [7,8,9]; // Массив с элементами 0, 1 и 2</b>

<b>&quot;0&quot; in data  // =&gt; true: массив содержит элемент &quot;0&quot;</b>

<b>1 in data    // =&gt; true: числа преобразуются в строки</b>

<b>3 in data     // =&gt; 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>&amp;&amp;, ||</b>
и
<b>!</b>
используются для выполнения операций булевой алгебры и часто применяются в сочетании с операторами отношений для объединения двух выражений отношений в одно более сложное выражение. Эти операторы описываются в подразделах, следующих ниже. Чтобы понять, как они действуют, вам может потребоваться еще раз прочитать о концепции «истинности» и «ложности» значений в разделе 3.3.

4.10.1. Логическое И (&&)

Условно говоря, оператор

<b>&amp;&amp;</b>
действует на трех уровнях. На самом простом уровне, когда в операции участвуют логические операнды, оператор
<b>&amp;&amp;</b>
выполняет операцию «логическое И» над двумя значениями: он возвращает
<b>true</b>
тогда и только тогда, когда оба операнда имеют значение
<b>true</b>
. Если один или оба операнда имеют значение
<b>false</b>
, оператор возвращает
<b>false</b>
.