The logical nullish assignment (
x ??= y
) operator only assigns if
x
is
nullish
(
null
or
undefined
).
expr1 ??= expr2
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
相当于:
x ?? (x = y);
And not equivalent to the following which would always perform an assignment:
x = x ?? y;
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
The definition of 'Assignment operators' in that specification. |
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Logical nullish assignment (
x ??= y
)
|
Chrome 85 | Edge 85 | Firefox 79 | IE No | Opera No | Safari 14 | WebView Android 85 | Chrome Android 85 | Firefox Android No | Opera Android No | Safari iOS 14 | Samsung Internet Android No | nodejs No |
完整支持
不支持