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

Логический оператор НЕ (!) (логическое отрицание) меняет логическое значение операнда с истины в ложь и наоборот. Обычно он используется с булевыми (логическими) значениями. При использовании с любыми другими значениями, если операнд может быть преобразован в 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

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