Логічне НЕ (!)

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

Синтаксис

!expr

Опис

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

Якщо значення може бути приведене до true, воно є так званим правдивим значенням. Якщо значення може бути приведене до false, воно називається хибним.

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

  • null;
  • NaN;
  • 0;
  • порожній рядок ("" або '', або ``);
  • undefined.

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

Приклади

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

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

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

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

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

Таке саме перетворення можна виконати функцією 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

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

Специфікація
ECMAScript (ECMA-262)
The definition of 'Logical NOT expression' in that specification.

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

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
Logical NOT (!)Chrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support 3Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support 0.1.100

Legend

Full support  
Full support

Див. також