このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

ヌル値合体代入演算子 (??=)

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨2020年9月⁩.

ヌル値合体代入演算子 (??=) は、論理ヌル代入とも呼ばれ、左オペランドがヌル値null または undefined)の場合にのみ右オペランドを評価し、左オペランドに代入します。

試してみましょう

const a = { duration: 50 };

a.speed ??= 25;
console.log(a.speed);
// 予想される結果: 25

a.duration ??= 10;
console.log(a.duration);
// 予想される結果: 50

構文

js
x ??= y

解説

ヌル値合体代入演算子は短絡評価を行うため、x ??= yx ?? (x = y) と同等です。ただし、式 x は一度だけ評価されます。

左辺がヌル値でない場合、ヌル値合体演算子の短絡が発生するため代入は実行されません。例えば、 xconst であっても、以下のコードはエラーが発生しません。

js
const x = 1;
x ??= 2;

次のコードもセッターを起動しません。

js
const x = {
  get value() {
    return 1;
  },
  set value(v) {
    console.log("セッターが呼び出されました");
  },
};

x.value ??= 2;

そして、常に代入が行われる以下と等価ではありません。

js
const x = 1;
x ??= console.log("y が評価されました");
// 何もログ出力されない

ヌル値合体代入演算子の使用

ヌル値合体代入演算子を使用すると、オブジェクトのプロパティに既定値を割り当てることができます。 構造分解と既定値を組み合わせる方法と異なり、 ??= はプロパティの値が null の場合にも既定値を適用します。

js
function config(options) {
  options.duration ??= 100;
  options.speed ??= 25;
  return options;
}

config({ duration: 125 }); // { duration: 125, speed: 25 }
config({}); // { duration: 100, speed: 25 }

仕様書

Specification
ECMAScript® 2026 Language Specification
# sec-assignment-operators

ブラウザーの互換性

関連情報