Web/JavaScript/Reference/Operators/Logical nullish assignment
The logical nullish assignment (x ??= y) operator only assigns if x is nullish (null or undefined).
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Syntax
expr1 ??= expr2
Description
Short-circuit evaluation
The nullish coalescing operator is evaluated left to right, it is tested for possible short-circuit evaluation using the following rule:
(some expression that is neither null nor undefined) ?? expr is short-circuit evaluated to the left-hand side expression if the left-hand side proves to be neither null nor undefined.
Short circuit means that the expr part above is not evaluated, hence any side effects of doing so do not take effect (e.g., if expr is a function call, the calling never takes place).
Logical nullish assignment short-circuits as well meaning that x ??= y is equivalent to:
x ?? (x = y);
And not equivalent to the following which would always perform an assignment:
x = x ?? y;
Examples
Using logical nullish assignment
function config(options) {
options.duration ??= 100;
options.speed ??= 25;
return options;
}
config({ duration: 125 }); // { duration: 125, speed: 25 }
config({}); // { duration: 100, speed: 25 }
Specifications
| Specification |
|---|
| Logical Assignment OperatorsThe definition of 'Assignment operators' in that specification. |
Browser compatibility
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Update compatibility data on GitHub
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Logical nullish assignment (x ??= y)
|
Chrome
Full support 85 |
Edge
Full support 85 |
Firefox
Full support 79 |
IE
No support No |
Opera
No support No |
Safari
Full support 14 |
WebView Android
Full support 85 |
Chrome Android
Full support 85 |
Firefox Android
Full support 79 |
Opera Android
No support No |
Safari iOS
Full support 14 |
Samsung Internet Android
No support No |
nodejs
No support No |
Legend
- Full support
- Full support
- No support
- No support
See also
Logical nullish assignment (??=) by Mozilla Contributors is licensed under CC-BY-SA 2.5.