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 source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Syntax
undefined
Description
undefined
is a property of the global object; i.e., it is a variable in global scope. The initial value of undefined
is the primitive value undefined
.
In modern browsers (JavaScript 1.8.5 / Firefox 4+), undefined
is a non-configurable, non-writable property per the ECMAScript 5 specification. 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
.
While it is possible to use it 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" (function() { var undefined = 'foo'; console.log(undefined, typeof undefined); })(); // logs "foo string" (function(undefined) { console.log(undefined, typeof undefined); })('foo');
Examples
Strict equality and undefined
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.
var x; if (x === undefined) { // these statements execute } else { // these statements do not execute }
Note: The strict equality operator rather than the standard equality operator must be used here, because x == undefined
also checks whether x
is null
, while strict equality doesn't. null
is not equivalent to undefined
. See comparison operators
for details.
Typeof
operator and undefined
Alternatively, typeof
can be used:
var 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 }
Void
operator and undefined
The void
operator is a third alternative.
var x; if (x === void 0) { // these statements execute } // y has not been declared before if (y === void 0) { // throws a - Uncaught ReferenceError: y is not defined }
Specifications
Specification | Status | Comment |
---|---|---|
ECMAScript 1st Edition (ECMA-262) The definition of 'undefined' in that specification. |
Standard | Initial definition. Implemented in JavaScript 1.3. |
ECMAScript 5.1 (ECMA-262) The definition of 'undefined' in that specification. |
Standard | |
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'undefined' in that specification. |
Standard | |
ECMAScript Latest Draft (ECMA-262) The definition of 'undefined' in that specification. |
Draft |
Browser compatibility
Desktop | Mobile | Server | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
undefined | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 5.5 | Opera Full support Yes | Safari Full support Yes | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support Yes | Safari iOS Full support Yes | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
Legend
- Full support
- Full support