論理否定 (!)

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

構文

!expr

解説

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

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

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

  • null
  • NaN
  • 0
  • 空文字列 ("" または '' または ``)
  • undefined

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

否定の使用

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

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

二重否定 (!!)

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

同じ変換は 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

仕様書

仕様書
ECMAScript (ECMA-262)
Logical OR expression の定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
Logical OR (||)Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100

凡例

完全対応  
完全対応

関連情報