1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Node.jsでよく見る `!!token` の意味と使いどころ

Posted at

はじめに

Node.js のコードを眺めていると、!!token のような一見不思議な記述を目にすることがあります。
「なぜビックリマークが2つも続くの?」と感じた方も多いのではないでしょうか。
実はこの !! は、任意の値を真偽値(boolean)に変換するためのシンプルかつ短い書き方です。
本記事では、この記法の意味や使いどころ、そして注意点について解説します。

!! の基本的な意味

  • ! は「否定(NOT)」を意味する論理演算子
!true   // false
!false  // true
!'abc'  // false(truthyな値)
!0      // true(falsyな値)
  • !! は「2回否定」することで元の真偽値に戻す
    boolean型にキャストする効果
!!'abc' // true
!!0     // false
!!null  // false
!!{}    // true

なぜ !! を使うのか?

  • JavaScriptは if (token) のように書くと truthy/falsy 判定してくれるが、変数に明確に true / false を代入したい場面では !! が便利
  • 明示的に boolean に変換した方が意図が伝わることも多い
  • 型が重要な TypeScript や JSON API のレスポンス整形でも役立つ

Node.js 実務での利用例

1. 環境変数の有無を判定

const hasToken = !!process.env.API_TOKEN;
console.log(hasToken); // true または false

📌 ポイント

  • process.env はすべて 文字列または undefined
  • !! を使うことで明示的に boolean に変換

2. ユーザー認証チェック

function isAuthenticated(req) {
  return !!req.headers.authorization;
}

if (isAuthenticated(req)) {
  // 認証済みの処理
} else {
  // 認証エラー
}

📌 ポイント

  • !! によって authorization ヘッダーが存在するかを簡潔に判定

3. データ整形

const user = {
  id: 1,
  name: 'Alice',
  isActive: !!row.active_flag // DBの数値をboolean化
};

📌 ポイント

  • MySQLやPostgreSQLの 0 / 1 フラグを boolean に変換

🌐 似たような方法との比較

方法 説明
!!value 最短でboolean化 !!'abc'true
Boolean(value) 明示的で可読性高め Boolean('abc')true
value ? true : false 三項演算子で変換 長くなるが条件付き処理も可能

‼️ 注意点

  • !! は「truthy/falsy」に依存するため、0 や空文字も false になる
  • 0 を有効な値として扱いたい場合は使わない方がいい
!!0 // false(意図と違うかも)

まとめ

  • !! は JavaScript で boolean型に変換する短縮記法
  • Node.js では環境変数やリクエストヘッダーの存在判定に便利
  • ただし falsy 判定の仕様を理解して使うことが大事
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?