Resumen
La propiedad global undefined representa el valor primitivo undefined
. Es uno de los valores primitivos de JavaScript.
Atributos de la propiedad undefined |
|
---|---|
Sobrescribir | No |
Numerable | No |
Configurable | No |
Sintaxis
undefined
Descripci贸n
undefined
es una propiedad del objeto global, es decir, una variable de alcance global. El valor inicial de undefined
es el valor primitivo undefined
.this needs clarification, but that would require explaining primitive values
En navegadores modernos (JavaScript 1.8.5 / Firefox 4+), undefined
es una propiedad no-configurable, no-grabable seg煤n la especificaci贸n ECMAScript 5. A煤n cuando este no sea el caso, evite sobreescribirlo.
Una variable a la que no se le ha asignado valor, o no se ha declarado en absoluto (no se declara, no existe) son de tipo undefined
. Un m茅todo o sentencia tambi茅n devuelve undefined
si la variable que se est谩 evaluando no tiene asignado un valor. Una funci贸n devuelve undefined
si no se ha devuelto
un valor.
Ten en cuenta que si no se ha declarado una variable ni expl铆cita ni impl铆citamente, no puedes compararla con undefined ya que obtendr铆as un ReferenceError, pero puedes comparar su tipo con la cadena (String) "undefined". En el ejemplo m谩s abajo se podr谩 ver c贸mo conseguir esto usando el operador typeof.
Aunque es posible usarlo como un identificador (nombre de variable) en cualquier otro 谩mbito que no sea el 谩mbito global (porque undefined
no es una palabra reservada
), hacerlo es una mala idea que provocar谩 que t煤 c贸digo sea dif铆cil de mantener y depurar.
//NO HAGAS ESTO
// registra "foo string"
(function(){ var undefined = 'foo'; console.log(undefined, typeof undefined); })()
// registra "foo string"
(function(undefined){ console.log(undefined, typeof undefined); })('foo');
Ejemplos
Igualdad estricta y undefined
Puedes usar undefined
y los operadores de igualdad y desigualdad estricta para determinar si una variable tiene un valor asignado. En el siguiente ejemplo la variable x
no est谩 inicializada, y la sentencia if
se eval煤a como verdadera.
var x;
if (x === undefined) {
// se ejecutan estas instrucciones
}
else {
// estas instrucciones no se ejecutan
}
Nota: Aqu铆 se debe usar el operador de igualdad estricta en lugar del operador de igualdad est谩ndar, ya que x == undefined
tambi茅n verifica si x
es null
, mientras que el de igualdad estricta no. null
no es equivalente a undefined
. Vea operadores de comparaci贸n
para m谩s detalles.
Typeof operador y undefined
Alternativamente se puede usar typeof
. Recuerda que este siempre devolver谩 una cadena de texto con el tipo:
var x;
if (typeof x === 'undefined') {
// se ejecutan estas instrucciones
}
Una raz贸n para usar typeof
es que no devuelve un error si la variable no fue declarada.
// x no fue declarada antes
if (typeof x === 'undefined') { // devuelve true
//se ejecutan estas instrucciones
}
if (x === undefined) { // lanza un ReferenceError
}
Sin embargo, este tipo de t茅cnica debe evitarse. JavaScript es un lenguaje de 谩mbito est谩tico, por lo que determinar si una variable se encuentra declarada puede ser definido al ver si est谩 declarada en un contexto de inclusi贸n. La 煤nica excepci贸n es el 谩mbito global, pero el 谩mbito global est谩 vinculado al objeto global, por lo que comprobar la existencia de una variable en el contexto global puede realizarse comprobando la existencia de una propiedad del objeto global (utilizando el operador in
, por ejemplo).
Operador void y undefined
El operador void
es una tercer alternativa.
var x;
if (x === void 0) {
// se ejecutan estas instrucciones
}
// y no fue declarada antes
if (y === void 0) {
// lanza un ReferenceError (a diferencia de `typeof`)
}
Especificaciones
Especificaci贸n | Estado | Comentario |
---|---|---|
ECMAScript 1st Edition (ECMA-262) La definici贸n de 'undefined' en esta especificaci贸n. |
Standard | Definici贸n inicial. Implementado en JavaScript 1.3. |
ECMAScript 5.1 (ECMA-262) La definici贸n de 'undefined' en esta especificaci贸n. |
Standard | |
ECMAScript 2015 (6th Edition, ECMA-262) La definici贸n de 'undefined' en esta especificaci贸n. |
Standard | |
ECMAScript Latest Draft (ECMA-262) La definici贸n de 'undefined' en esta especificaci贸n. |
Draft |
Compatibilidad en Navegadores
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |