Javascript

Nullish Coalescing(??)の使い方と || との比較 – JavaScript 入門

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


スポンサードリンク

1️⃣ 基本仕様とポイント

項目 内容
意味 左辺が null または undefined の時だけ右辺を評価し、その結果を返す
対象外の falsy 値 0, '', false, NaN はそのまま返る(fallback されない)
評価順序 左から右へ短絡的に評価。左辺が nullish でなければ右辺は評価されない

ポイント
?? は「null 合体対象」だけを判定するため、意図しない falsy 値の除外が起こりません。デフォルト値を設定したいケースで最も安全です。


2️⃣ || と比較して何が違うか

演算子 判定対象 代表的な落とし穴
|| すべての falsy (0, '', false, NaN, null, undefined) 010 に置き換わるなど、意図せぬフォールバックが起こりやすい
?? nullish のみ (null, undefined) 0 や空文字はそのまま保持できる


3️⃣ 実務でのデフォルト値設定パターン

3.1 シンプルなフォールバック

API が title を返さない(=null/undefined)場合だけ 'Untitled' に置き換わります。

3.2 フォーム入力の数値変換

解説
Number('')0 ではなく NaN を返します。NaN ?? 1NaN がそのまま結果になるため、期待したデフォルトが適用されません。空文字かどうかを先に判定するか、isNaN() を併用してください。

3.3 オブジェクトの分割代入と組み合わせ

nullundefined のみがデフォルトに置き換わり、空文字や 0 は保持されます。


4️⃣ Optional Chaining (?.) と併用したベストプラクティス

シナリオ 結果
user が未定義 '名無し'
profile が未定義 '名無し'
name が空文字 ('') ''(そのまま)
namenull / undefined '名無し'

推奨パターン一覧

用途 書き方
プロパティ取得+デフォルト obj?.prop ?? defaultVal
配列要素の安全取得 arr?.[idx] ?? fallback
関数呼び出しのオプショナル化 service?.fetch()?.data ?? []

5️⃣ TypeScript とブラウザ対応

5.1 型推論

?? の結果は「左辺の型」から null/undefined が除外されたユニオンになります。これにより、後続処理で null チェックを書かずに済みます。

5.2 ブラウザ対応(2024 年時点)

ブラウザ バージョン (Native 対応)
Chrome 84+
Edge 84+
Firefox 79+
Safari 14.1+
Opera 70+

注意
上表は執筆時点の情報です。将来的に新しいバージョンがリリースされたら、Can I use – Nullish Coalescing で最新状況を確認してください。

5.3 古い環境へのトランスパイル例(Babel)

preset-env が対象ブラウザに合わせてポリフィルを自動挿入します。


6️⃣ よくある誤用と回避策

誤用ケース 問題点 回避策
Number(input.value) ?? 1 NaN は fallback されない 空文字かどうかを先に判定、または isNaN() を使う
obj ?? { a: 1 }(オブジェクト全体) 左辺がオブジェクトでも falsy 判定にならずデフォルトが無視される プロパティ単位で obj.a ?? defaultA と書く
x ??= y の乱用 副作用や意図しない代入が起きやすい 必要な初期化シーンに限定し、コメントで目的を明示する
nullundefined を同一視しすぎる 仕様上は同等だが、API がどちらを返すかで挙動が変わることもある 受け取るデータの型定義を正確に行い、テストで両方を確認する

7️⃣ まとめと次のアクション

  1. ??nullundefined のみを判定 → falsy 値はそのまま保持できる。
  2. || と使い分け → デフォルト値ロジックには必ず ??、論理演算が必要なときだけ || を選ぶ。
  3. 数値入力の変換では注意Number('')NaN になる点を忘れない。空文字判定を先に行うか、isNaN() を併用する。
  4. Optional Chaining と組み合わせる → 深いプロパティへの安全アクセスとデフォルト値設定が一行で完結。
  5. TypeScript の型推論を活用null/undefined が除外された型が得られ、コードの安全性が向上する。
  6. ブラウザ対応は常に最新情報をチェック → Can I use でサポート状況を確認し、古い環境は Babel 等でトランスパイルする。

実践課題
- 自分のプロジェクト内で || を使っている箇所を検索し、?? に置き換えてテストを走らせる。
- フォームや API のサニタイズロジックに ???. を組み合わせたコードを書いてみる。

これらのステップを踏めば、デフォルト値処理がシンプルかつ安全になり、バグの温床となりがちな falsy 判定から解放されます。ぜひ Nullish Coalescing を活用して、コードベースの可読性と保守性を高めてください。

スポンサードリンク

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


-Javascript