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