JavaScript: Логические операторы
Оператор | Тип оператора | А | О | Типы значений |
---|---|---|---|---|
! … … && … … || … |
Логическое НЕ (инверсия) Логическое И Логическое ИЛИ |
справа налево слева направо слева направо |
1 2 2 |
любое→булево любое, любое→любое любое, любое→любое |
Оператор !
(логическое НЕ) преобразует (если необходимо) значение своего операнда в булево значение, затем инвертирует это значение в противоположное и возвращает полученное в результате инвертирования булево значение:
var a = true, b = false; alert(!a); // false alert(!b); // true
Если оператор !
дважды применить к операнду, то значение будет преобразовано в его логический эквивалент:
var a = 1, b = 0; alert(!!a); // true. Тоже самое, что и Boolean(a); alert(!!b); // false. Тоже самое, что и Boolean(b);
Оператор &&
(логическое И) сначала вычисляет значение левого операнда. Если левый операнд имеет значение false
или значение, которое может быть преобразовано в false
, то возвращается значение левого операнда, при этом значение правого операнда вычисляться не будет:
var y = 1; var x = 0 && ++y; // ++y не будет вычисляться alert("x: " + x); // 0 alert("y: " + y); // 1
Если левый операнд имеет значение true
или значение, которое может быть преобразовано в true
, оператор переходит к вычислению значения правого операнда, и возвращает значение правого операнда:
var x = 1 && 2; var y = 1 && 0; alert("x: " + x); // 2 alert("y: " + y); // 0
Оператор ||
(логическое ИЛИ) сначала вычисляет значение левого операнда. Если левый операнд имеет значение true
или значение, которое может быть преобразовано в true
, то возвращается значение левого операнда, при этом значение правого операнда вычисляться не будет:
var y = 1; var x = 1 || ++y; // ++y не будет вычисляться alert("x: " + x); // 1 alert("y: " + y); // 1
Если левый операнд имеет значение false
или значение, которое может быть преобразовано в false
, оператор переходит к вычислению значения правого операнда, и возвращает значение правого операнда:
var x = 0 || 2; var y = null || 0; alert("x: " + x); // 2 alert("y: " + y); // 0
С этой темой смотрят: