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

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

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

В противном случае, если значение слева является истинным, тогда результат всего выражения определяется значением справа. Если значение справа является истинным, значением всего выражения также должно быть истинное значение, а если значение справа является ложным, значением всего выражения должно быть ложное значение. Поэтому, когда значение слева является истинным, оператор

&&
вычисляет и возвращает значение справа:

var о = { х : 1 };

var р = null;

о &&
о.х // => 1: о - истинное значение, поэтому возвращается о.х

р && р.х // => null: р - ложное значение, поэтому возвращается р,

// а выражение р.х не вычисляется

Важно понимать, что оператор

&&
может не вычислять выражение правого операнда. В примере выше переменная р имеет значение
null
, поэтому попытка вычислить выражение р.х привела бы к ошибке ТуреЕггог. Но здесь задействован оператор &&, благодаря чему выражение р.х вычисляется, только если р будет содержать истинное значение - не null или undefined.

Такое поведение оператора

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

if (а == b) stop; // Функция stop вызывается, только если а == b

(а == b) && stop; // То же самое

В целом следует с осторожностью использовать выражения с побочными эффектами (присваивания, инкременты, декременты или вызовы функций) справа от оператора

&&
, потому что эти побочные эффекты будут проявляться в зависимости от значения слева.

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

4.10.2. Логическое ИЛИ (||)

Оператор

||
выполняет операцию «логическое ИЛИ» над двумя операндами. Если один или оба операнда имеют истинное значение, он возвращает истинное значение. Если оба операнда имеют ложные значения, он возвращает ложное значение.

Хотя оператор

||
чаще всего применяется просто как оператор «логическое ИЛИ», он, как и оператор
&&
, ведет себя более сложным образом. Его работа начинается с вычисления первого операнда, выражения слева. Если значение этого операнда является истинным, возвращается истинное значение. В противном случае оператор вычисляет второй операнд, выражение справа, и возвращает значение этого выражения.

Как и при использовании оператора

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

Характерное использование этого оператора заключается в том, что он выбирает первое истинное значение из предложенного множества альтернатив:

// Если переменная max_width определена, используется ее значение. В противном случае

// значение извлекается из объекта preferences. Если объект (или его свойство max_with)

// не определен, используется значение константы, жестко определенной в тексте программы,

var max = max_width || preferences.max_width || 500;

Этот прием часто используется в функциях для определения значений по умолчанию параметров:

// Скопировать свойства объекта о в объект р и вернуть р

function сору(о, р) {

р = р || {}; // Если объект р не был передан, создать новый объект.

// реализация тела функции

}

4.10.3. Логическое НЕ (!)

Оператор

!
является унарным оператором, помещаемым перед одиночным операндом. Он используется для инверсии логического значения своего операнда. Например, если переменная х имеет истинное значение, то выражение
возвращает значение
false
. Если х имеет ложное значение, то выражение
возвращает значение
false
. (true - вообще-то)

В отличие от операторов

&&
и
||
, оператор
!
преобразует свой операнд в логическое значение (используя правила, описанные в главе 3) перед тем, как инвертировать его. Это означает, что оператор ! всегда возвращает
true
или
false
что всегда можно преобразовать любое значение х в его логический эквивалент, дважды применив этот оператор:
!!х
(раздел 3.8.2).

Будучи унарным, оператор ! имеет высокий приоритет и тесно связан с операндом. Если вам потребуется инвертировать значение выражения, такого как

р && q
, необходимо будет использовать круглые скобки:
! (р && q).
В булевой алгебре есть две теоремы, которые можно выразить на языке JavaScript:

// Следующие две проверки на идентичность дают положительный результат

// при любых значениях р и q

!(р && q) === !р || !q !(р || q) === !р && !q

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

Газлайтер. Том 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
рейтинг книги
Красноармеец