The nullish coalescing operator
?? will result in the left expression unless that contains null or undefined - in that case the right expression is used. It mainly resolves the issues of the logical or operator
|| in combination with the conversion into boolean of falsy values like zero or empty strings.
It should therefore be a no-brainer to just replace all
?? - or is it?
Consider the following code snippet:
item[kind] || null
This would usually be a prime example for the nullish coalescing operator, were it not for the fact that the right expression of the or operator is
Now imagine this example in the context of a react application, where the number zero or an empty string, which are both falsy, are rendered as text node. Had we used the nullish coalescing operator instead, it would result in unwanted nodes being rendered, in the case of the number zero even visible ones.
Values may be coerced on purpose and using the nullish coalescing operator without prior consideration could therefore cause a regression.
TL;DR: if the right value of or/nullish coalescing operator
undefined, take a closer look if the effects of type coercion could be intended. Otherwise, using
?? instead of
|| will make your code more predictable.