1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
---
title: Логическое НЕ (!)
slug: Web/JavaScript/Reference/Operators/Logical_NOT
tags:
- JavaScript
- Language feature
- Logical Operator
- Operator
- Reference
browser-compat: javascript.operators.logical_not
---
{{jsSidebar("Operators")}}
Логический оператор НЕ (`!`) (логическое отрицание) меняет логическое значение операнда с истины в ложь и наоборот. Обычно он используется с {{jsxref("Boolean", "булевыми")}} (логическими) значениями. При использовании с любыми другими значениями, если операнд может быть преобразован в `true`, то вернёт `false`; в противном случае он возвращается `true`.
{{EmbedInteractiveExample("pages/js/expressions-logical-not.html", "shorter")}}
## Синтаксис
```js
!expr
```
## Описание
Возвращает `false`, если операнд может быть преобразован в `true`; в противном случае возвращается `true`.
Если значение может быть преобразовано в `true`, то оно рассматривается как {{Glossary("truthy", "истинноподобное (truthy)")}}. Если же значение может быть преобразовано в `false`, то оно называется {{Glossary("falsy", "ложноподобным (falsy)")}}.
Примеры выражений, которые могут быть преобразованы в `false`:
- `null`;
- `NaN`;
- `0`;
- пустая строка (`""`, `''`, ` `` `);
- `undefined`.
Несмотря на то, что оператор `!` может использоваться с операндами, значения которых не относится к типу Boolean, это всё равно булевый оператор, поскольку его возвращаемое значение всегда можно преобразовать в [булевый примитив](/ru/docs/Web/JavaScript/Data_structures#Boolean_type). Чтобы явно преобразовать возвращаемое значение этого оператора (или вообще любое выражение) в соответствующее значение булевого типа, используйте двойной [оператор НЕ](/ru/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Logical_NOT) или конструктор {{jsxref("Global_Objects/Boolean/Boolean", "Boolean")}}.
## Примеры
### Использование логического НЕ
В следующем коде показаны примеры использования оператора `!` (логическое НЕ).
```js
n1 = !true // !t вернёт false
n2 = !false // !f вернёт true
n3 = !'' // !f вернёт true
n4 = !'Cat' // !t вернёт false
```
### Двойное НЕ (`!!`)
Можно один за другим использовать пару операторов НЕ, чтобы явным образом принудительно преобразовать любое значение в соответствующий [булевый примитив](/en-US/docs/Web/JavaScript/Data_structures#Boolean_type).
Преобразование основано на "истинноподобности" или "ложноподобности" значения (см. {{Glossary("truthy")}} и {{Glossary("falsy")}})).
Точно такое же преобразование может быть выполнено с помощью функции {{jsxref("Global_Objects/Boolean/Boolean",
"Boolean")}}.
```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
```
## Спецификации
{{Specifications}}
## Поддержка браузерами
{{Compat}}
## Смотрите также
- {{jsxref("Boolean")}}
- {{Glossary("Truthy")}}
- {{Glossary("Falsy")}}
|