Логическое НЕ (!)
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Логический оператор НЕ (!
) (логическое отрицание) меняет логическое значение операнда с истины в ложь и наоборот. Обычно он используется с булевыми
(логическими) значениями. При использовании с любыми другими значениями, если операнд может быть преобразован в 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