ヌル値合体代入演算子 (??=)
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 ??= y
は x ?? (x = y)
と同等です。ただし、式 x
は一度だけ評価されます。
左辺がヌル値でない場合、ヌル値合体演算子の短絡が発生するため代入は実行されません。例えば、 x
が const
であっても、以下のコードはエラーが発生しません。
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 |
ブラウザーの互換性
Loading…