aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript/reference/operators/logical_not/index.md
diff options
context:
space:
mode:
Diffstat (limited to 'files/ru/web/javascript/reference/operators/logical_not/index.md')
-rw-r--r--files/ru/web/javascript/reference/operators/logical_not/index.md96
1 files changed, 96 insertions, 0 deletions
diff --git a/files/ru/web/javascript/reference/operators/logical_not/index.md b/files/ru/web/javascript/reference/operators/logical_not/index.md
new file mode 100644
index 0000000000..ea5ead94b6
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/logical_not/index.md
@@ -0,0 +1,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")}}