Логическое НЕ (!)

Логический оператор НЕ (!) (логическое отрицание) меняет логическое значение операнда с истины в ложь и наоборот. Обычно он используется с булевыми (логическими) значениями. При использовании с любыми другими значениями, если операнд может быть преобразован в true, то вернёт false; в противном случае он возвращается true.

Интерактивный пример

Синтаксис

js
!expr;

Описание

Возвращает false, если операнд может быть преобразован в true; в противном случае возвращается true.

Если значение может быть преобразовано в true, то оно рассматривается как истинноподобное (truthy). Если же значение может быть преобразовано в false, то оно называется ложноподобным (falsy).

Примеры выражений, которые могут быть преобразованы в false:

  • null;
  • NaN;
  • 0;
  • пустая строка ("", '', ``);
  • undefined.

Несмотря на то, что оператор ! может использоваться с операндами, значения которых не относится к типу Boolean, это всё равно булевый оператор, поскольку его возвращаемое значение всегда можно преобразовать в булевый примитив. Чтобы явно преобразовать возвращаемое значение этого оператора (или вообще любое выражение) в соответствующее значение булевого типа, используйте двойной оператор НЕ (en-US) или конструктор Boolean (en-US).

Примеры

Использование логического НЕ

В следующем коде показаны примеры использования оператора ! (логическое НЕ).

js
n1 = !true; // !t вернёт false
n2 = !false; // !f вернёт true
n3 = !""; // !f вернёт true
n4 = !"Cat"; // !t вернёт false

Двойное НЕ (!!)

Можно один за другим использовать пару операторов НЕ, чтобы явным образом принудительно преобразовать любое значение в соответствующий булевый примитив. Преобразование основано на "истинноподобности" или "ложноподобности" значения (см. truthy и falsy)).

Точно такое же преобразование может быть выполнено с помощью функции Boolean (en-US).

js
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

Конвертация операторов НЕ

Следующая операция с булевыми значениями:

js
!!bCondition;

всегда эквивалентна:

js
bCondition;

Спецификации

Specification
ECMAScript Language Specification
# sec-logical-not-operator

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также