Логическое НЕ (!)
Логический оператор НЕ (!
) (логическое отрицание) меняет логическое значение операнда с истины в ложь и наоборот. Обычно он используется с булевыми
(логическими) значениями. При использовании с любыми другими значениями, если операнд может быть преобразован в true
, то вернёт false
; в противном случае он возвращается true
.
Интерактивный пример
Синтаксис
!expr;
Описание
Возвращает false
, если операнд может быть преобразован в true
; в противном случае возвращается true
.
Если значение может быть преобразовано в true
, то оно рассматривается как истинноподобное (truthy). Если же значение может быть преобразовано в false
, то оно называется ложноподобным (falsy).
Примеры выражений, которые могут быть преобразованы в false
:
null
;NaN
;0
;- пустая строка (
""
,''
,``
); undefined
.
Несмотря на то, что оператор !
может использоваться с операндами, значения которых не относится к типу Boolean, это всё равно булевый оператор, поскольку его возвращаемое значение всегда можно преобразовать в булевый примитив. Чтобы явно преобразовать возвращаемое значение этого оператора (или вообще любое выражение) в соответствующее значение булевого типа, используйте двойной оператор НЕ или конструктор Boolean
.
Примеры
Использование логического НЕ
В следующем коде показаны примеры использования оператора !
(логическое НЕ).
n1 = !true; // !t вернёт false
n2 = !false; // !f вернёт true
n3 = !""; // !f вернёт true
n4 = !"Cat"; // !t вернёт false
Двойное НЕ (!!
)
Можно один за другим использовать пару операторов НЕ, чтобы явным образом принудительно преобразовать любое значение в соответствующий булевый примитив. Преобразование основано на "истинноподобности" или "ложноподобности" значения (см. truthy и falsy)).
Точно такое же преобразование может быть выполнено с помощью функции Boolean
.
n1 = !!true; // !!truthy вернёт true
n2 = !!{}; // !!truthy вернёт true: любой объект - истинноподобный...
n3 = !!new Boolean(false); // ...даже Boolean-объект со значением false из вызова .valueOf()!
n4 = !!false; // !!falsy вернёт false
n5 = !!""; // !!falsy вернёт false
n6 = !!Boolean(false); // !!falsy вернёт false
Конвертация операторов НЕ
Следующая операция с булевыми значениями:
!!bCondition;
всегда эквивалентна:
bCondition;
Спецификации
Specification |
---|
ECMAScript Language Specification # sec-logical-not-operator |
Совместимость с браузерами
BCD tables only load in the browser