¿La variable existe pero parece que no? Analicemos las verificaciones en JavaScript
\n\n¿Alguna vez ha escrito un script, lo ha ejecutado y, de repente, ¡bam!, la consola del navegador se tiñe de rojo con el grito Uncaught ReferenceError: myVar is not defined? Le resulta familiar. O al revés: la variable está declarada, pero no está seguro de si se le ha asignado un valor. En JavaScript, estos dos conceptos ("existe" e "inicializada") a menudo se confunden incluso por desarrolladores experimentados.
En esta guía, analizaremos de una vez por todas cómo verificar correctamente si una variable existe en JavaScript, en qué se diferencia "definida" de "inicializada" y cómo evitar el 90% de los errores relacionados con undefined y ReferenceError. ¡Allá vamos!
Brevemente sobre lo principal: ¿qué significa "la variable existe"?
\n\nEn JavaScript, una variable tiene tres estados:
\n\n- \n
- No declarada (undeclared) — la variable no existe en la memoria. Intentar acceder a ella generará un
ReferenceError. \n - Declarada pero no inicializada (declared, but undefined) — hemos escrito
let x;ovar y;, pero no le hemos asignado un valor. La variable existe, su tipo esundefined. \n - Declarada e inicializada (declared and initialized) — la variable tiene un valor concreto (número, cadena, objeto, etc.). \n
La mayoría de las preguntas en Stack Overflow (y hay miles) se reducen a una: "¿Cómo saber si una variable no generará un error al acceder a ella?" La respuesta es: use typeof. Pero hay matices. Vamos a analizarlos.
Método n.º 1. El operador typeof: su mejor amigo
\n\nLa forma más fiable y segura de verificar si una variable está definida en JavaScript es el operador typeof. Su principal ventaja: nunca lanza un error, incluso si la variable no está declarada.
Ejemplo para una variable no declarada
\n\n// La variable myVar no está declarada\nif (typeof myVar !== 'undefined') {\n console.log('¡La variable existe!');\n} else {\n console.log('La variable NO existe o su valor es undefined');\n}\n// Salida: "La variable NO existe o su valor es undefined"\n\nTenga en cuenta: typeof devuelve la cadena 'undefined' tanto para una variable no declarada como para una declarada pero no inicializada (let x;). Esto es bueno y malo. Bueno porque no capturamos un error. Malo porque no distinguimos entre estos dos casos.
Ejemplo para una variable declarada pero vacía
\n\nlet myVar; // declarada pero no inicializada\nconsole.log(typeof myVar); // "undefined" — ¡también undefined!\n\nif (typeof myVar !== 'undefined') {\n console.log('La variable existe y tiene un valor');\n} else {\n console.log('La variable es undefined (o no está declarada, o no está inicializada)');\n}\n\nConclusión: typeof es la solución ideal si solo necesita evitar un ReferenceError. Si necesita distinguir entre "no declarada" y "vacía", siga leyendo.
Método n.º 2. Verificación a través de window (contexto global)
\n\nSi trabaja en un navegador y la variable está declarada globalmente (mediante var o implícitamente), se convierte en una propiedad del objeto window. Esto abre posibilidades adicionales para verificar la existencia de una variable.
Usando el operador in
\n\n// Variable global\nvar globalVar = 42;\n\nconsole.log('globalVar' in window); // true\nconsole.log('nonExistentVar' in window); // false\n\nEste método solo funciona para variables globales declaradas con var o asignadas sin palabra clave. let y const no crean propiedades del objeto window (viven en el ámbito de bloque).