The logical OR assignment (
x ||= y
) operator only assigns if
x
is
falsy
.
expr1 ||= expr2
logical OR operator works like this:
x || y; // returns x when x is truthy // returns y when x is not truthy
The logical OR operator short-circuits: the second operand is only evaluated if the first operand doesn’t already determine the result.
Logical OR assignment short-circuits as well, meaning it only performs an assignment if the logical operation would evaluate the right-hand side. In other words,
x ||= y
相当于:
x || (x = y);
And not equivalent to the following which would always perform an assignment:
x = x || y;
Note that this behavior is different to mathematical and bitwise assignment operators.
If the "lyrics" element is empty, set the
innerHTML
to a default value:
document.getElementById('lyrics').innerHTML ||= '<i>No lyrics.</i>'
Here the short-circuit is especially beneficial, since the element will not be updated unnecessarily and won't cause unwanted side-effects such as additional parsing or rendering work, or loss of focus, etc.
Note: Pay attention to the value returned by the API you're checking against. If an empty string is returned (a
falsy
value),
||=
must be used, otherwise you want to use the
??=
operator (for
null
or
undefined
return values).
| 规范 |
|---|
|
Logical Assignment Operators
The definition of 'Assignment operators' in that specification. |
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Logical OR 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 |
完整支持
不支持