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