The global undefined
property represents the primitive value undefined
. It is one of JavaScript's primitive types.
Property attributes of undefined
| |
---|---|
Writable | no |
Enumerable | no |
Configurable | no |
The global undefined
property represents the primitive value undefined
. It is one of JavaScript's primitive types.
Property attributes of undefined
| |
---|---|
Writable | no |
Enumerable | no |
Configurable | no |
undefined
undefined
is a property of the global object. That is, it is a variable in global scope. The initial value of undefined
is the primitive value undefined
.
In all non-legacy browsers, undefined
is a non-configurable, non-writable property. (Even when this is not the case, avoid overriding it.)
A variable that has not been assigned a value is of type undefined
. A method or statement also returns undefined
if the variable that is being evaluated does not have an assigned value. A function returns undefined
if a value was not returned
.
Note: While you can use undefined
as an identifier (variable name) in any scope other than the global scope (because undefined
is not a reserved word), doing so is a very bad idea that will make your code difficult to maintain and debug.
// DON'T DO THIS // logs "foo string" (() => { const undefined = 'foo'; console.log(undefined, typeof undefined); })(); // logs "foo string" ((undefined) => { console.log(undefined, typeof undefined); })('foo');
You can use undefined
and the strict equality and inequality operators to determine whether a variable has a value. In the following code, the variable x
is not initialized, and the if
statement evaluates to true.
let x; if (x === undefined) { // these statements execute } else { // these statements do not execute }
Note: The strict equality operator (as opposed to the standard equality operator) must be used here, because x == undefined
also checks whether x
is null
, while strict equality doesn't. This is because null
is not equivalent to undefined
.
See Equality comparison and sameness for details.
Alternatively, typeof
can be used:
let x; if (typeof x === 'undefined') { // these statements execute }
One reason to use typeof
is that it does not throw an error if the variable has not been declared.
// x has not been declared before if (typeof x === 'undefined') { // evaluates to true without errors // these statements execute } if (x === undefined) { // throws a ReferenceError }
However, there is another alternative. JavaScript is a statically scoped language, so knowing if a variable is declared can be read by seeing whether it is declared in an enclosing context.
The global scope is bound to the global object, so checking the existence of a variable in the global context can be done by checking the existence of a property on the global object, using the in
operator, for instance:
if ('x' in window) { // these statements execute only if x is defined globally }
The void
operator is a third alternative.
let x; if (x === void 0) { // these statements execute } // y has not been declared before if (y === void 0) { // throws Uncaught ReferenceError: y is not defined }
Specification |
---|
ECMAScript Language Specification # sec-undefined |
Desktop | Mobile | Server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | Deno | Node.js | |
undefined |
1 |
12 |
1 |
5.5 |
3 |
1 |
4.4 |
18 |
4 |
10.1 |
1 |
1.0 |
1.0 |
0.10.0 |
null
© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined