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
С этой темой смотрят: