When we see some code from a company, such as from Google or from the ECMA committee: a == null
, what does it mean?
It may seem it is for checking whether the variable refers to the primitive null
, but in fact, it means:
a === null || a === undefined
In fact, we can see that a == null
is identical to using (a === null || a === undefined)
, not more, not less. They are exactly the same.
This is used by the ECMA TC39 (Ecma International, Technical Committee 39), when they defined optional chaining:
a?.b
which they used
(a == null) ? undefined : a.b
the part a == null
is exactly: when a
is null
or undefined
, then simply return undefined
. This usage may be a little bit hard to understand, and is used by people more familiar with JavaScript, to "test for nullish values" — either null
or undefined
. While we may not use it if other people reading our code may get confused, it is good when we read a == null
and know what it means.
The term "nullish" is also being used in the JavaScript community, as in nullish coalescing. We can read more about it on MDN.
Often this is all we need to know, but if we get into one technical detail:
The only exception to the rule above is document.all
:
document.all == null // true
by the rule above, it may appear then
document.all === null || document.all === undefined
returns true
. But it returns false
. This is the only known exception, but document.all
returns an object, while !!document.all
returns false
, so document.all
has very special behavior inside of JavaScript.
Reference on MDN.
Top comments (0)