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
4.11. Выражения присваивания
Для присваивания значения переменной или свойству в языке JavaScript используется оператор =
. Например:
і = 0 // Присвоит переменной і значение 0.
о.х = 1 // Присвоит свойству х объекта о значение 1.
Левым операндом оператора = должно быть левостороннее выражение: переменная, элемент массива или свойство объекта. Правым операндом может быть любое значение любого типа. Значением оператора присваивания является значение правого операнда. Побочный эффект оператора = заключается в присваивании значения правого операнда переменной или свойству, указанному слева, так что при последующих обращениях к переменной или свойству будет получено это значение.
Чаще всего выражения присваивания используются как самостоятельные инструкции; тем не менее иногда можно увидеть, как выражение присваивания включается в более сложные выражения. Например, в одном выражении можно совместить операции присваивания и проверки значения:
(а = b) == 0
обычно бывает необходимо использовать круглые скобки, если выражение присваивания используется в составе более сложного выражения.
Оператор присваивания имеет ассоциативность справа налево, поэтому при наличии в выражении нескольких операторов присваивания они вычисляются справа налево. Благодаря этому можно написать код, присваивающий одно значение нескольким переменным, например:
Читать дальше
Конец ознакомительного отрывка
Купить книгу