aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript/reference/operators/logical_not/index.md
blob: ea5ead94b6e5092583a202cd874e7c5d2159841d (plain)
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")}}