JavaScript. Подробное руководство, 6-е издание
Шрифт:
"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. 4.10.1. Логическое И (&&)
Условно говоря, оператор
&&
действует на трех уровнях. На самом простом уровне, когда в операции участвуют логические операнды, оператор &&
выполняет операцию «логическое И» над двумя значениями: он возвращает true
тогда и только тогда, когда оба операнда имеют значение true
. Если один или оба операнда имеют значение false
, оператор возвращает false
. Оператор
&&
часто используется для объединения двух выражений отношений:
х == 0 && у == 0 // true тогда и только тогда, когда х и у равны 0
Выражения отношений всегда возвращают значение
true
или false
, поэтому в подобных ситуациях сам оператор &&
всегда возвращает true
или false
. Операторы отношений имеют более высокий приоритет, чем оператор &&
(и ||
), поэтому такие выражения можно записывать без использования скобок. Но оператор
&&
не требует, чтобы его операнды были логическими значениями. Напомню, что все значения в языке JavaScript являются либо «истинными», либо «ложными». (Подробности в разделе 3.3. Ложными значениями являются false, null, undefined, 0, -0, NaN
и "". Все другие значения, включая все объекты, являются истинными.) На втором уровне оператор &&
действует как логическое И для истинных и ложных значений. Если оба операнда являются истинными, оператор возвращает истинное значение. В противном случае, когда один или оба операнда являются ложными, возвращается ложное значение. В языке JavaScript все выражения и инструкции, использующие логические значения, будут также работать с истинными или ложными значениями, поэтому тот факт, что оператор &&
не всегда возвращает true или false, на практике не вызывает никаких проблем. Обратите внимание, что в предыдущем абзаце говорилось, что оператор возвращает «истинное значение» или «ложное значение», но при этом не уточнялось, какое именно значение возвращается. Для этого нам необходимо перейти на третий, заключительный уровень оператора
&&
. Свою работу оператор начинает с вычисления первого операнда - выражения слева. Если выражение слева возвращает ложное значение, значением всего выражения также должно быть ложное значение, поэтому оператор &&
просто возвращает значение слева и не вычисляет выражение справа.
Поделиться:
Популярные книги
Тринадцатый X
10. Видящий смерть
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Старый, но крепкий 9
9. Культивация без насилия
Фантастика:
рпг
уся
фэнтези
сянься
5.00
рейтинг книги
За Горизонтом
8. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Черный Маг Императора 5
5. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний реанорец. Том IX
8. Высшая Речь
Фантастика:
фэнтези
попаданцы
аниме
5.75
рейтинг книги
Его звали Тони. Книга 5
5. Щенки косуль
Фантастика:
городское фэнтези
технофэнтези
попаданцы
7.00
рейтинг книги
Кодекс Крови. Книга ХVIII
18. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Тактик
2. Офицер
Фантастика:
альтернативная история
7.70
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я до сих пор царь. Книга XXXII
32. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Газлайтер. Том 22
22. История Телепата
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Князь Андер Арес 4
4. Андер Арес
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Враг из прошлого тысячелетия
4. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Двойник короля 17
17. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00