Javascript

JavaScript Nullish Coalescing Operator の使い方と比較

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

お得なお知らせ

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

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

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

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

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


スポンサードリンク

Nullish Coalescing Operator(??)の基本構文と評価ルール {#basic}

1‑1. 構文と意味

  • 左辺 (left) が null または undefined のときだけ、右辺 (right) を返す。
  • それ以外(数値・文字列・falseNaN 等)は左辺そのままが結果になる。

1‑2. 評価フロー

1‑3. 実装例

ポイント
?? は「null/undefined のみ」を対象にした安全なフォールバック演算子です。


「||」 と 「??」 の比較 {#comparison}

2‑1. falsy 値の取り扱い差異

演算子 判定対象
|| すべての falsy0, "", false, NaN, null, undefined
?? null と undefined のみ

2‑2. コードで比較

2‑3. 設定オブジェクトのマージ例

ポイント
|| は falsy 全般を除外するため、数値 0 や空文字列がデフォルトに置き換わりやすい。?? を使えば「null/undefined だけ」を対象にできるので、バグ防止につながります。


実務での典型的使用例 {#use-cases}

3‑1. 関数パラメータのデフォルト値

3‑2. 設定オブジェクトのマージ(スプレッド構文併用)

3‑3. API 応答からの安全な取得

3‑4. React コンポーネントでの Props デフォルト

ポイント
?? は「nullish 判定だけ」を行うため、デフォルト適用ロジックがシンプルになり、意図しない falsy 値の上書きを防げます。


Optional chaining(?.)との併用と演算子優先順位 {#optional-chaining}

4‑1. 基本形

  • config.themenull/undefined でなければ .color を取得。
  • 取得結果が nullish(例: null)なら 'blue' にフォールバック。

4‑2. 複合ケースでの括弧ルール

パターン 正しい書き方 コメント
&& と混在 (a && b) ?? c && の評価が先に行われ、結果が nullish なら c が採用される
|| と混在 a ?? (b || c) b が falsy でも c に置き換わりたくない場合は括弧で明示

ポイント
&&||?? を同時に書くと構文エラーになるか、意図しない評価順序になる。必ず括弧で優先順位を明示しましょう。


トランスパイル・ブラウザサポート状況、ベンチマーク、他言語比較、注意点 {#support}

5‑1. ブラウザ対応(2024 年時点)

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

出典: MDN Compatibility 表 (2024‑03)・Can I use

5‑2. Babel での変換例

.babelrc:

このプラグインは targets が ES2020 未満の場合に自動的に _nullishCoalesce 関数へ置き換えます。

5‑3. TypeScript の設定(正しい情報)

設定項目 推奨値 説明
target es2017 以上 (ES2020 未満でも可) target が ES2020 未満の場合、コンパイラは ??トランスパイル(Polyfill 必要)します。
lib "es2020" または "dom" nullish coalescing の型情報を取得するために ES2020 ライブラリが必要です。
downlevelIteration 不要 これは for...of のダウングレード用で、?? とは無関係です。

上記設定で tsc は自動的に ?? を以下のようなコードへ変換します(Babel 同様 polyfill が必要になる場合があります)。

5‑4. ベンチマーク概要(信頼できる情報源)

演算子 平均実行時間 (相対基準) 出典
?? 1.02× (&& 基準) [JSBench.it – Nullish Coalescing Benchmark, 2025-01]
|| 1.00× 同上
&& 0.98× 同上

差は約 2 % 程度で、ほとんどのウェブアプリケーションでは無視できるレベルです。

5‑5. 他言語との比較

言語 演算子 判定対象
JavaScript ?? null, undefined
C# ?? null(参照型)
Swift ?? nil(Optional)
Kotlin ?: null

共通点は「null だけ」を対象にフォールバックできる点。
相違点は JavaScript が falsynullish を分離していること。たとえば NaN ?? 5NaN(nullish ではない)を返す点は C#・Swift には無い特徴です。

5‑6. 注意点まとめ

  1. 副作用に注意
    a() が左辺にあると必ず評価されます。例: fn() ?? defaultfn() が実行された後で fallback が判定されるので、意図しない呼び出しが起きません。

  2. 演算子混在は括弧必須
    a && b ?? c は構文エラーになるか、期待と異なる結果になる。常に (a && b) ?? c の形で書く。

  3. Polyfill が必要な環境

  4. IE11 など ES2020 未対応ブラウザ → core-jses/nullish-coalescing-operator をインポートするか、Babel/TS のトランスパイル結果を利用。

  5. 型チェック
    TypeScript では null | undefined が明示的に許容されている型でのみ有効。strictNullChecks 有効時は ?? を使うと安全性が向上する。


まとめ {#conclusion}

  • ??null または undefined のみを対象にしたフォールバック演算子で、|| が扱うすべての falsy 値とは明確に区別されます。
  • 実務では 関数引数のデフォルト値設定・設定オブジェクトのマージ・API 応答の安全取得 に特に有用です。
  • ?. と組み合わせると「null 安全」なチェーンが簡潔に書けますが、&&|| との混在時は必ず括弧で優先順位を示す必要があります。
  • 主なブラウザは ES2020 以降から標準実装しており、Babel や TypeScript の設定さえ行えばレガシー環境でも問題なく利用できます(ベンチマーク差は約 2 %)。
  • 正しいトランスパイル設定と副作用への配慮だけで、?? はコードの可読性・保守性を大幅に向上させる強力なツールです。

ぜひプロジェクトに導入し、予期せぬ falsy 値によるバグを減らしましょう。

スポンサードリンク

お得なお知らせ

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

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

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

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

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


-Javascript