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?
objectundefinedprimitivestring