Solución:
Al menos en el momento de escribir … No, no parece que puedas hacer algo como esto:
var a = undeclared(var) ? 'undeclared' : 'undefined'
La razón es que no puede pasar una variable no declarada a una función; Genera un error, incluso en modo no estricto.
Lo mejor que podemos hacer es esto:
var barIsDeclared = true;
try { bar; }
catch (e) {
if (e.name == "ReferenceError") {
barIsDeclared = false;
}
}
console.log(barIsDeclared);
¿Por qué?
Indefinido: Ocurre cuando se ha declarado una variable pero no se le ha asignado ningún valor. Indefinido no es una palabra clave.
No declarado: Ocurre cuando intentamos acceder a cualquier variable que no esté inicializada o declarada anteriormente usando la palabra clave var o const. Si usamos el operador ‘typeof’ para obtener el valor de una variable no declarada, enfrentaremos el error de tiempo de ejecución con el valor de retorno como “indefinido”. El alcance de las variables no declaradas es siempre global.
Por ejemplo:
- Indefinido:
var a;
undefined
console.log(a) // Success!
- No declarado:
console.log(myVariable) // ReferenceError: myVariable is not defined
Cuando intentamos registrar un undeclared
variable, genera un error. Intentando registrar un undefined
variable no. Hacemos un try catch
para comprobar solo eso.
'use strict'
Vale la pena mencionar que agregar 'use strict'
en su código verifica que no esté presente ninguna variable no declarada y genera un error si hay una.
function define() {
//'use strict' verifies that no undeclared variable is present in our code
'use strict';
x = "Defined";
}
define();
ReferenceError: x is not defined
Otras lecturas:
- Comprobando si existe una variable en javascript
- ¿Qué son las variables no declaradas y no definidas en JavaScript?
- Pregunta de la entrevista de JS: ¿Cuál es la diferencia entre una variable que es: nula, indefinida o no declarada?
- JavaScript comprueba si la variable existe (está definida / inicializada)
- Modo estricto