JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptの「!!」(二重否定)演算子とは?意味と使い方をわかりやすく解説

JavaScriptの「!!」(二重否定)演算子とは?

JavaScriptにおける二重否定演算子(!!)は、論理否定演算子(!)を2回続けて適用する書き方で、任意の値の真偽(truthy / falsy)を判定し、その結果をBoolean型(true または false)として返します。

つまり、!!p!(!p) と同じ意味です。「どんな値でも明示的にブール値へ変換したい」という場面でよく使われる、JavaScriptの定番イディオム(慣用句)のひとつです。

動作の仕組み

!!p!(!p) として捉えると、次のように動作します。

p が falsy(偽とみなされる値)の場合:
 !p は true になり、!!p は false になる。

p が truthy(真とみなされる値)の場合:
 !p は false になり、!!p は true になる。

具体的なコード例

実際のコードで挙動を確認してみましょう。

0 === false            // false(0 と false は厳密には等しくない)
!!0 === false          // true(0 を Boolean に変換すると false)

!!0 === false
!!parseInt("foo") === false   // parseInt("foo") は NaN なので falsy
!!1 === true
!!-1 === true
!!false === false
!!true === true

このように、!! を使うことで数値・文字列・null・undefined など、あらゆる値を対応するブール値へ一括して変換できます。

falsy とみなされる値の一覧

JavaScriptで false と評価される値(falsyな値)は以下の6種類だけです。

  • false
  • 0-00n も含む)
  • ""(空文字列)
  • null
  • undefined
  • NaN

これら以外の値(空でない文字列、配列、オブジェクトなど)は、すべて truthy として扱われます。

「!!」の実用的な使いどころ

!! は、値を確実に true / false に正規化したいときに便利です。例えば、以下のようなケースで活躍します。

  • 条件分岐の結果をブール値として変数に保存したいとき
  • 関数の戻り値として、必ず純粋なブール値を返したいとき
  • 値の存在チェック(nullundefined でないか)を簡潔に表現したいとき

例:const hasItems = !!items.length; のように書けば、配列に要素があるかどうかをブール値として一目で取得できます。

  1. JavaScript DOMとは?基本の仕組みと要素の取得方法をわかりやすく解説

    JavaScriptのDOM(Document Object Model:ドキュメントオブジェクトモデル)は、Webページ上のHTML要素を表現する仕組みです。DOMはインターフェースとして機能し、ページのコンテンツやスタイルを変更することで、Webページを自由に操作できるようにします。 DOMにアクセスするには、Webページ上で右クリックして「検証(Inspect)」を選択します。すると画面の右側または左側にパネルが表示され、現在閲覧しているページのHTML要素を確認できます。要素にマウスカーソルを合わせると、ページ上の該当部分がハイライトされるため、どの要素がページのどのセクションに対応

  2. C/C++の「!」演算子に相当するPythonの機能とは?

    Pythonで「!」演算子に相当するものは? C/C++において、! 記号は論理否定(NOT)演算子として定義されています。Pythonでは、これに相当するのが not 演算子です。 not 演算子は、オペランドが偽(False)であれば真(True)を返し、真(True)であれば偽(False)を返します。つまり、ブール値(真偽値)を反転させる働きを持っています。 基本的な使い方と実行例 >>> not(True) False >>> not(False) True >>> not(20>30) True >>>