--- title: Логічне НЕ (!) slug: Web/JavaScript/Reference/Operators/Logical_NOT tags: - JavaScript - Довідка - Логічний оператор - Оператор translation_of: Web/JavaScript/Reference/Operators/Logical_NOT ---
{{jsSidebar("Operators")}}

Логічний оператор НЕ (!) (логічне доповнення, заперечення) перетворює правдивість на хибність та навпаки. Він зазвичай використовується з {{jsxref("Boolean", "булевими")}} (логічними) значеннями. При використанні з не булевими значеннями він вертає false, якщо його єдиний операнд може бути приведений до true; інакше, вертає true.

{{EmbedInteractiveExample("pages/js/expressions-logical-not.html", "shorter")}}

Синтаксис

!expr

Опис

Вертає false, якщо його єдиний операнд може бути приведений до true; інакше, вертає true.

Якщо значення може бути приведене до true, воно є так званим {{Glossary("truthy","правдивим")}} значенням. Якщо значення може бути приведене до false, воно називається {{Glossary("falsy","хибним")}}.

Прикладами виразів, які можуть бути приведені до false, є:

Хоча оператор ! може використовуватись з операндами не булевого типу, він все одно вважатиметься булевим оператором, оскільки значення, яке він вертає, завжди може бути приведене до булевого примітиву. Щоб явно перетворити повернені значення (або, взагалі, будь-який вираз) до відповідного булевого значення, скористайтесь подвійним оператором НЕ або конструктором {{jsxref("Global_Objects/Boolean/Boolean", "Boolean")}}.

Приклади

Використання НЕ

Наступний код демонструє приклади оператора ! (логічне НЕ).

n1 = !true               // !t вертає false
n2 = !false              // !f вертає true
n3 = !''                 // !f вертає true
n4 = !'Кіт'              // !t вертає false

Подвійне НЕ (!!)

Можна використовувати пару операторів НЕ поспіль, щоб явно викликати перетворення будь-якої величини на відповідний булевий примітив. Перетворення базується на "правдивості" або "хибності" значення (дивіться {{Glossary("truthy")}} та {{Glossary("falsy")}}).

Таке саме перетворення можна виконати функцією {{jsxref("Global_Objects/Boolean/Boolean", "Boolean")}}.

n1 = !!true                   // !!truthy вертає true
n2 = !!{}                     // !!truthy вертає true: будь-який об'єкт є правдивим...
n3 = !!(new Boolean(false))   // ...навіть об'єкти Boolean, в яких .valueOf() дорівнює false!
n4 = !!false                  // !!falsy вертає false
n5 = !!""                     // !!falsy вертає false
n6 = !!Boolean(false)         // !!falsy вертає false

Перетворення НЕ

Наступна операція з булевими значеннями:

!!bCondition

завжди дорівнює:

bCondition

Специфікації

Специфікація
{{SpecName('ESDraft', '#sec-logical-not-operator', 'Logical NOT expression')}}

Сумісність з веб-переглядачами

{{Compat("javascript.operators.logical_not")}}

Див. також