このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

論理否定演算子 (!)

Baseline 広く利用可能

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。

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

試してみましょう

const a = 3;
const b = -2;

console.log(!(a > 0 || b > 0));
// 予想される結果: false

構文

js
!x

解説

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

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

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

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

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

否定の使用

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

js
!true; // !t は false を返す
!false; // !f は true を返す
!""; // !f は true を返す
!"Cat"; // !t は false を返す

二重否定 (!!)

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

同じ変換は Boolean() 関数を通じて行うこともできます。

js
!!true; // !!truthy は true を返す
!!{}; // !!truthy は true: あらゆるオブジェクトは真値になります…
!!new Boolean(false); // … .valueOf() が false の Boolean オブジェクトであっても
!!false; // !!falsy は false を返す
!!""; // !!falsy は false を返す
!!Boolean(false); // !!falsy は false を返す

否定同士の変換

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

js
!!bCondition

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

js
bCondition

仕様書

仕様書
ECMAScript® 2027 Language Specification
# sec-logical-not-operator

ブラウザーの互換性

関連情報