Дэвид Флэнаган - 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(); // То же самое
В целом следует с осторожностью использовать выражения с побочными эффектами (присваивания, инкременты, декременты или вызовы функций) справа от оператора && , потому что эти побочные эффекты будут проявляться в зависимости от значения слева.
Несмотря на довольно запутанный алгоритм работы этого оператора, проще всего и абсолютно безопасно рассматривать его как оператор булевой алгебры, который манипулирует истинными и ложными значениями.
Читать дальшеИнтервал:
Закладка: