Javascript

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

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

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

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 を活用して、コードベースの可読性と保守性を高めてください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Javascript