Null 合体代入 (??=)

Null 合体代入 (x ??= y) 演算子は、xnullish (null または undefined) である場合にのみ代入を行います。

構文

expr1 ??= expr2

説明

短絡評価(ショートサーキット)

Null 合体演算子は左から右に評価され、次のルールを使って短絡評価の可能性があるかどうかテストされます。

(null や undefined ではない式) ?? expr は、左辺が null でも undefined でもないことが証明されたら、左辺の式が短絡評価されます。

短絡評価とは、上記の expr 部分が評価されないことを意味します。したがって、評価された場合の副作用は発生しません。(例えば、expr が関数呼び出しである場合、呼び出しは行われません。)

Null 合体代入も短絡評価されます。これは、x ??= y が以下と等価であることを意味します。

x ?? (x = y);

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

x = x ?? y;

Null 合体代入演算子の使用

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

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

仕様

仕様書
Logical Assignment Operators
Assignment operators の定義

ブラウザの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
Logical nullish assignment (x ??= y)Chrome 完全対応 85Edge 完全対応 85Firefox 完全対応 79IE 未対応 なしOpera 未対応 なしSafari 完全対応 14WebView Android 完全対応 85Chrome Android 完全対応 85Firefox Android 完全対応 79Opera Android 未対応 なしSafari iOS 完全対応 14Samsung Internet Android 未対応 なしnodejs 未対応 なし

凡例

完全対応  
完全対応
未対応  
未対応

関連情報