The JavaScript exception "cannot use ??
unparenthesized within ||
and &&
expressions" occurs when an nullish coalescing operator is used with a logical OR or logical AND in the same expression without parentheses.
The JavaScript exception "cannot use ??
unparenthesized within ||
and &&
expressions" occurs when an nullish coalescing operator is used with a logical OR or logical AND in the same expression without parentheses.
The operator precedence chain looks like this:
| > && > || > = | > ?? > =
However, the precedence between ??
and &&
/||
is intentionally undefined, because the short circuiting behavior of logical operators can make the expression's evaluation counter-intuitive. Therefore, the following combinations are all syntax errors, because the language doesn't know how to parenthesize the operands:
Instead, make your intent clear by parenthesizing either side explicitly:
When migrating legacy code that uses ||
and &&
for guarding against null
or undefined
, you may often convert it partially:
function getId(user, fallback) { // Previously: user && user.id || fallback return user && user.id ?? fallback; // SyntaxError: cannot use `??` unparenthesized within `||` and `&&` expressions }
Instead, consider parenthesizing the &&
:
Even better, consider using optional chaining instead of &&
:
??
)
© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cant_use_nullish_coalescing_unparenthesized