Quería verificar si la variable está definida o no. Por ejemplo, lo siguiente arroja un error no definido
alert( x );
¿Cómo puedo detectar este error?
Quería verificar si la variable está definida o no. Por ejemplo, lo siguiente arroja un error no definido
alert( x );
¿Cómo puedo detectar este error?
Respuestas:
En JavaScript, null
es un objeto. Hay otro valor para las cosas que no existen, undefined
. El DOM regresa null
para casi todos los casos en los que no puede encontrar alguna estructura en el documento, pero en JavaScript undefined
es el valor utilizado.
Segundo, no, no hay un equivalente directo. Si realmente desea verificar específicamente null
, haga lo siguiente:
if (yourvar === null) // Does not execute if yourvar is `undefined`
Si desea verificar si existe una variable, eso solo se puede hacer con try
/ catch
, ya typeof
que tratará una variable no declarada y una variable declarada con el valor de undefined
como equivalente.
Pero, para verificar si una variable se declara y no es undefined
:
if (yourvar !== undefined) // Any scope
Anteriormente, era necesario utilizar el typeof
operador para verificar indefinidamente, porque era posible reasignar undefined
como una variable. La vieja forma se veía así:
if (typeof yourvar !== 'undefined') // Any scope
El problema de undefined
ser reasignable se solucionó en ECMAScript 5, que se lanzó en 2009. Ahora puede usar ===
y !==
probar de forma segura undefined
sin usar, typeof
ya que undefined
ha sido de solo lectura durante algún tiempo.
Si desea saber si un miembro existe independientemente pero no le importa cuál es su valor:
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
Si quieres saber si una variable es verdadera :
if (yourvar)
typeof
operador ( typeof null == 'object'
). El null
valor es un valor primitivo , que es el único valor del tipo Nulo .
La única forma de probar realmente si una variable es undefined
hacer lo siguiente. Recuerde, indefinido es un objeto en JavaScript.
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
Algunas de las otras soluciones en este hilo lo llevarán a creer que una variable no está definida aunque haya sido definida (con un valor de NULL o 0, por ejemplo).
ReferenceError
.
undefined
que un objeto en JavaScript es información errónea. ¿Esta afirmación se relaciona con su respuesta de todos modos? Es un valor undefined
de tipo undefined
, asignado al identificador global nombrado undefined
.
undefined
ha sido de solo lectura desde ES5. Usted puede probar de forma segura para el uso indefinido if (x === undefined) {...}
o el uso de la taquigrafía como esto: if (x === void 0)
.
Técnicamente, la solución adecuada es (creo):
typeof x === "undefined"
A veces puedes ponerte perezoso y usar
x == null
pero eso permite que tanto una variable indefinida x, como una variable x que contenga nulo, devuelvan verdadero.
var x;
y luego typeof x;
obtendrá "undefined"
como si lo hicieratypeof lakjdflkdsjflsj;
Una versión aún más fácil y más abreviada sería:
if (!x) {
//Undefined
}
O
if (typeof x !== "undefined") {
//Do something since x is defined.
}
A menudo he hecho:
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
También puede usar el operador condicional ternario:
var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
//var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
var a = false;
? Debería comprobar eso si en a===undefined
cambio
var x;
hacer lo anterior arrojará un error
!a
probará verdadero para undefined
, también prueba verdadero para 0
y null
y false
. Esto es muy incorrecto y debe eliminarse.
A menudo uso la forma más simple:
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
EDITAR:
Sin inicializar la variable, se generará una excepción "Error de referencia no capturado: la variable no está definida ..."
Uncaught ReferenceError: variable is not defined
variable
se define por var variable;
. Y este fragmento se anulará variable
en el ámbito local. Puede romper la lógica que espera acceder a un cierre o variable global. Es decir:var variable = 1; function test() { var variable; if (variable === undefined){ console.log('Variable is undefined'); } else { console.log('Variable is defined: ' + variable); } } test(); // Variable is undefined
Otra posible "solución" es usar el window
objeto. Evita el problema de error de referencia en un navegador.
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
undefined
. Esto no hará eso.
¡El error te dice que x
ni siquiera existe! No se ha declarado , lo que es diferente de que se le asigne un valor.
var x; // declaration
x = 2; // assignment
Si declaras x
, no obtendrás un error. Recibiría una alerta que dice undefined
porque x
existe / ha sido declarado pero no se le ha asignado un valor.
Para verificar si la variable ha sido declarada, puede usar typeof
cualquier otro método para verificar si existe una variable generará el mismo error que obtuvo inicialmente.
if(typeof x !== "undefined") {
alert(x);
}
Esto verifica el tipo de valor almacenado en x
. Solo volverá undefined
cuando x
no se haya declarado O si se ha declarado y aún no se ha asignado.
typeof
operador.
El void
operador regresa undefined
por cualquier argumento / expresión que se le pase. para que pueda probar el resultado (en realidad, algunos minificadores cambian su código de undefined
a void 0
para guardar un par de caracteres)
Por ejemplo:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeof
y pensar undefined
puede reasignarse, lo que no ha sido posible durante aproximadamente una década.
undefined
, porque Dios solo sabe qué razón, el uso void 0
siempre volverá undefined
independientemente.
La respuesta aceptada es correcta. Solo quería agregar una opción más. También puede usar el try ... catch
bloqueo para manejar esta situación. Un ejemplo extraño:
var a;
try {
a = b + 1; // throws ReferenceError if b is not defined
}
catch (e) {
a = 1; // apply some default behavior in case of error
}
finally {
a = a || 0; // normalize the result in any case
}
Tenga en cuenta el catch
bloqueo, que es un poco desordenado, ya que crea un alcance a nivel de bloque. Y, por supuesto, el ejemplo está extremadamente simplificado para responder la pregunta, no cubre las mejores prácticas en el manejo de errores;).
Utilizo una pequeña función para verificar que se haya declarado una variable, lo que realmente reduce la cantidad de desorden en mis archivos javascript. Agrego un cheque para el valor para asegurarme de que la variable no solo exista, sino que también se le haya asignado un valor. La segunda condición verifica si la variable también ha sido instanciada, porque si la variable ha sido definida pero no instanciada (vea el ejemplo a continuación), todavía arrojará un error si intenta hacer referencia a su valor en su código.
No instanciado - var my_variable;
Instantado -var my_variable = "";
function varExists(el) {
if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) {
return true;
} else {
return false;
}
}
Luego puede usar una declaración condicional para probar que la variable ha sido definida Y instanciada de esta manera ...
if ( varExists(variable_name) ) { // checks that it DOES exist }
o para probar que no se ha definido y uso instanciado ...
if( !varExists(variable_name) ) { // checks that it DOESN'T exist }
return typeof el !== "undefined" && typeof el.val() !== "undefined"