--- title: 論理否定 (!) slug: Web/JavaScript/Reference/Operators/Logical_NOT tags: - JavaScript - Language feature - Logical Operator - Operator - Reference - 演算子 - 言語機能 - 論理演算子 translation_of: Web/JavaScript/Reference/Operators/Logical_NOT ---
{{jsSidebar("Operators")}}

論理否定 (!) 演算子 (論理反転、否定) は、真値を取ると偽値になり、その逆も同様です。これは通常 {{jsxref("Boolean")}} (論理型) の値に使用されます。論理型以外の値に使用した場合、単一のオペランドが true に変換できる場合は false を返し、それ以外は true を返します。

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

構文

!expr

解説

単一のオペランドが true に変換できる場合は false を返し、それ以外は true を返します。

ある値が true に変換できる場合、その値は真値 ({{Glossary("truthy")}}) と呼ばれます。ある値が false に変換できる場合、その値は偽値 ({{Glossary("falsy")}}) と呼ばれます。

false に変換することができる式の例を示します。

! 演算子は論理値以外のオペランドに対して使用することができますが、返値が常に boolean プリミティブに変換することが可能であるため、論理演算子と見なすことができます。返値 (または一般的な式) を対応する論理値に明示的に変換するには、二重の否定演算子または {{jsxref("Global_Objects/Boolean/Boolean", "Boolean")}} コンストラクターを使用してください。

否定の使用

以下のコードは ! (論理否定) 演算子の例を示しています。

n1 = !true               // !t returns false
n2 = !false              // !f returns true
n3 = !''                 // !f returns true
n4 = !'Cat'              // !t returns false

二重否定 (!!)

複数の否定演算子を連続して使用することで、明示的にあらゆる値を対応する論理型プリミティブに変換することができます。変換は値の「真値性」または「偽値性」に基づいて行われます ({{Glossary("truthy")}} および {{Glossary("falsy")}} を参照)。

同じ変換は {{jsxref("Global_Objects/Boolean/Boolean", "Boolean")}} 関数を通じて行うこともできます。

n1 = !!true                   // !!truthy returns true
n2 = !!{}                     // !!truthy returns true: any object is truthy...
n3 = !!(new Boolean(false))   // ...even Boolean objects with a false .valueOf()!
n4 = !!false                  // !!falsy returns false
n5 = !!""                     // !!falsy returns false
n6 = !!Boolean(false)         // !!falsy returns false

否定同士の変換

以下の操作を論理値で行った場合、

!!bCondition

常に以下のものと等しくなります。

bCondition

仕様書

仕様書
{{SpecName('ESDraft', '#prod-LogicalORExpression', 'Logical OR expression')}}

ブラウザーの互換性

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

関連情報