Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание
- Название:JavaScript. Подробное руководство, 6-е издание
- Автор:
- Жанр:
- Издательство:Символ-Плюс
- Год:2012
- Город:СПб
- ISBN:978-5-93286-215-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание краткое содержание
Эта книга - одновременно и руководство программиста, и полноценный справочник по базовому языку JavaScript и клиентским прикладным интерфейсам, предоставляемым веб-броузерами.
JavaScript. Подробное руководство, 6-е издание - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
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, на практике не вызывает никаких проблем.
Обратите внимание, что в предыдущем абзаце говорилось, что оператор возвращает «истинное значение» или «ложное значение», но при этом не уточнялось, какое именно значение возвращается. Для этого нам необходимо перейти на третий, заключительный уровень оператора &&
. Свою работу оператор начинает с вычисления первого операнда - выражения слева. Если выражение слева возвращает ложное значение, значением всего выражения также должно быть ложное значение, поэтому оператор &&
просто возвращает значение слева и не вычисляет выражение справа.
В противном случае, если значение слева является истинным, тогда результат всего выражения определяется значением справа. Если значение справа является истинным, значением всего выражения также должно быть истинное значение, а если значение справа является ложным, значением всего выражения должно быть ложное значение. Поэтому, когда значение слева является истинным, оператор &&
вычисляет и возвращает значение справа:
var о = { х : 1 };
var р = null;
о && о.х // => 1: о - истинное значение, поэтому возвращается о.х
р && р.х // => null: р - ложное значение, поэтому возвращается р,
// а выражение р.х не вычисляется
Важно понимать, что оператор &&
может не вычислять выражение правого операнда. В примере выше переменная р имеет значение null
, поэтому попытка вычислить выражение р.х привела бы к ошибке ТуреЕггог. Но здесь задействован оператор &&, благодаря чему выражение р.х вычисляется, только если р будет содержать истинное значение - не null или undefined.
Такое поведение оператора &&
иногда называют «короткой схемой вычислений», и иногда можно встретить программный код, в котором такое поведение оператора &&
используется специально для выполнения инструкций по условию. Например, следующие две строки дают одинаковый результат:
if (а == b) stop(); // Функция stop() вызывается, только если а == b
(а == b) && stop(); // То же самое
В целом следует с осторожностью использовать выражения с побочными эффектами (присваивания, инкременты, декременты или вызовы функций) справа от оператора &&
, потому что эти побочные эффекты будут проявляться в зависимости от значения слева.
Несмотря на довольно запутанный алгоритм работы этого оператора, проще всего и абсолютно безопасно рассматривать его как оператор булевой алгебры, который манипулирует истинными и ложными значениями.
Читать дальшеИнтервал:
Закладка: