--- title: 論理否定 (!) slug: Web/JavaScript/Reference/Operators/Logical_NOT tags: - JavaScript - Language feature - Logical Operator - Operator - Reference - 演算子 - 言語機能 - 論理演算子 translation_of: Web/JavaScript/Reference/Operators/Logical_NOT ---
論理否定 (!
) 演算子 (論理反転、否定) は、真値を取ると偽値になり、その逆も同様です。これは通常 {{jsxref("Boolean")}} (論理型) の値に使用されます。論理型以外の値に使用した場合、単一のオペランドが true
に変換できる場合は false
を返し、それ以外は true
を返します。
!expr
単一のオペランドが true
に変換できる場合は false
を返し、それ以外は true
を返します。
ある値が true
に変換できる場合、その値は真値 ({{Glossary("truthy")}}) と呼ばれます。ある値が false
に変換できる場合、その値は偽値 ({{Glossary("falsy")}}) と呼ばれます。
false に変換することができる式の例を示します。
null
NaN
0
""
または ''
または ``
)undefined
!
演算子は論理値以外のオペランドに対して使用することができますが、返値が常に 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")}}