Чтение онлайн

на главную - закладки

Жанры

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, на практике не вызывает никаких проблем.

Обратите внимание, что в предыдущем абзаце говорилось, что оператор возвращает «истинное значение» или «ложное значение», но при этом не уточнялось, какое именно значение возвращается. Для этого нам необходимо перейти на третий, заключительный уровень оператора

&&
. Свою работу оператор начинает с вычисления первого операнда - выражения слева. Если выражение слева возвращает ложное значение, значением всего выражения также должно быть ложное значение, поэтому оператор
&&
просто возвращает значение слева и не вычисляет выражение справа.

Поделиться:
Популярные книги

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

На границе империй. Том 7. Часть 2

INDIGO
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 7. Часть 2

Звездная Кровь. Изгой

Елисеев Алексей Станиславович
1. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Звездная Кровь. Изгой

Хозяин Теней 4

Петров Максим Николаевич
4. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 4

Картофельное счастье попаданки

Иконникова Ольга
Фантастика:
фэнтези
5.00
рейтинг книги
Картофельное счастье попаданки

Экзорцист: Проклятый металл. Жнец. Мор. Осквернитель

Корнев Павел Николаевич
Фантастика:
фэнтези
героическая фантастика
5.50
рейтинг книги
Экзорцист: Проклятый металл. Жнец. Мор. Осквернитель

Доктора вызывали? или Трудовые будни попаданки

Марей Соня
Фантастика:
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Доктора вызывали? или Трудовые будни попаданки

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

Моя на одну ночь

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
5.50
рейтинг книги
Моя на одну ночь

Чехов. Книга 2

Гоблин (MeXXanik)
2. Адвокат Чехов
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Чехов. Книга 2

Хозяин Теней 2

Петров Максим Николаевич
2. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 2

Сумеречный стрелок 7

Карелин Сергей Витальевич
7. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный стрелок 7

Жизнь под чужим солнцем

Михалкова Елена Ивановна
Детективы:
прочие детективы
9.10
рейтинг книги
Жизнь под чужим солнцем

Красноармеец

Поселягин Владимир Геннадьевич
1. Красноармеец
Фантастика:
боевая фантастика
попаданцы
4.60
рейтинг книги
Красноармеец