JavaScript has multiple ways of indicating the absence of a value. This page
describes the two most common ways: the null
and undefined
data types.
null
The null
keyword represents an intentionally defined absence of value. null
is a primitive, although the typeof
operator returns that null
is an object.
This is an error that has carried
over from the first version of JavaScript and been left intentionally
unaddressed to avoid breaking expected behavior across the web.
typeof null
> object
You might define a variable as null
with the expectation that it reflects either a value assigned to it at some
point in a script or an explicitly absent value. You can also assign the null
value to an existing reference to clear a previous value.
undefined
undefined
is a primitive value assigned to variables
that have just been declared, or to the resulting value of an operation that
doesn't return a meaningful value. For example, this can happen when you declare
a function in a browser's developer console:
function myFunction() {}
> undefined
A function explicitly returns undefined
when its return
statement
returns no value.
(function() {
return;
}());
> undefined
Comparison of null
and undefined
Although undefined
and null
have some functional overlap, they have
different purposes. In the strictest sense, null
represents a value
intentionally defined as "blank," and undefined
represents a lack of any assigned value.
null
and undefined
are loosely equal, but not strictly equal.
The loose equality operator coerces operands of different types to boolean
values, making null
and undefined
both false
. The strict equality operator
considers operands of different data types to be unequal.
null == undefined
> true
null === undefined
> false
Unlike the reserved keyword null
, undefined
is a property of the
global object. This was a design
decision made early in JavaScript's development, and it let legacy browsers
overwrite undefined
completely. In modern browsers, it's still possible to use
undefined
as an identifier in non-global scopes, overriding its value within
the scope of that declaration. Never use undefined
as an identifier. It
can cause unexpected behaviors and is likely to confuse future maintainers of
your codebase.
Check your understanding
What does typeof null
return?
string
object
primitive
undefined