Javascript

JavaScriptのnullish coalescing演算子(??)とは?

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

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

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

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

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

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

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

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

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

Beyond Careerに無料相談する

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


スポンサードリンク

nullish coalescing演算子(??)とは?

JavaScriptのnullish coalescing演算子(??)は、nullまたはundefinedのみを条件として判定する論理演算子です。この演算子は2020年にES2020として導入され、値が明示的に「存在しない」状態にだけ反応します。falseや0、空文字などの偽値(falsy value)には影響を受けません。


定義と動作原理

??は、「左辺の値がnullまたはundefinedである場合に右辺の値を返す」というシンプルなロジックを持っています。例えば以下のように使用します:

この例ではconfig.api.endpointがnullのため、デフォルト値として'https://default.com'を設定しています。一方で、timeoutは5000(真値)なので代入されません。


null/undefinedの判定ロジック

条件 ??の結果 補足
null 右辺を返す 唯一のtrue条件
undefined 右辺を返す 変数未初期化時の状態
false 左辺を返す 偽値だがnull/undefinedではない
0 左辺を返す 数値の0はtrueと扱われる
'' 左辺を返す 空文字列もtrueと判定される

この特性により、「値が存在しない場合に限りデフォルト値を与える」という明確なロジックを実装できます。


??演算子と||演算子の違い

||演算子との最大の違いは、「偽値(false, 0, ''など)に対する反応」にあります。両者を比較することで、最適な使用シーンが明確になります。

判定条件の比較

演算子 null/undefinedのみ判定 偽値も含む判定
??
||

具体的な動作例を比較します:

実務選定ガイド

シナリオ 推奨演算子
値の存在有無だけ確認したい時 ??
デフォルト値を偽値でも設定したい場合 ||

デフォルト値設定の具体例

実際のコーディングシーンでは、オブジェクトや配列に??を使用して安全なデフォルト値を指定できます。

オブジェクトへの応用

APIレスポンスからデータを取得する際、プロパティが存在しない可能性がある場合:

?.(オプショナルチェイン)と組み合わせることで、ネストしたプロパティも安全に参照できます。

配列の初期化パターン

配列がundefinedまたはnullの場合、空配列を初期値として指定します:

このようにすることで、data.map(...)のような処理でエラーを回避できます。


nullish checkの応用シーン

状態管理での活用(React例)

Reactのstate初期値設定では、undefinedが混入する可能性のあるデータに対して??を使用します:

この場合、userがnull/undefinedの間は「ゲスト」と表示され、データが取得されたら実際の名前になります。

型ガードの簡略化(TypeScript)

TypeScriptでは??を使って型の明示的なチェックを省略できます:

この関数はnullまたはundefinedが渡された場合にデフォルト値を返し、inputがstringである場合はそのまま返します。


ES2020導入時の注意点

ブラウザサポートとポリフィルの選択

ES2020導入時には、環境ごとのサポート状況を確認することが重要です。MDNの最新情報(2023年12月時点)によると、すべての主要ブラウザで??実装済みです。

ただし、以下のような環境では注意が必要です:

  • Node.js v14以前:ES2020をサポートしていないためpolyfillが必要
  • IEや旧版モバイルブラウザ:使用不可(市場シェアが極めて小さい)

polyfillの検討

polyfillは??の動作を模倣するコードですが、Object.prototypeへのプロパティ定義は推奨されません。代わりに以下のような安全な方法が望ましいです:

注意: polyfillは開発環境でのみ有効化するべきです。本番環境ではES2020対応のエンジンを使用することを推奨します。


ポリフィルとトランスパイルの選択

ポリフィルの代替手段

  • BabelやTypeScript: 現代的な構文を古い環境でも実行可能にするためのトランスパイラ
  • Core JS: 一部の機能に特化したpolyfillライブラリ(??はすでに標準仕様なので必要ない場合も)

モジュールバンドラーでの設定例

参考: Node.js v14は2022年4月にサポート終了しています。最新のNode.js LTSバージョン(例: v18 or v20)を使用することを強く推奨します。


MDN公式ドキュメントで深掘り

JavaScript nullish coalescing 演算子に関する最新情報や詳細な仕様は、MDN Web Docs を参照してください。演算子の使い方や実装例、ブラウザサポート状況などが網羅されています。

このドキュメントを活用することで、より深い理解と実務への応用力が養われます。

スポンサードリンク

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

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

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

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

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

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

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

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

Beyond Careerに無料相談する

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


-Javascript