validar - Cómo verificar una variable no definida en JavaScript
validar undefined jquery (13)
Quería comprobar si la variable está definida o no. Por ejemplo, lo siguiente arroja un error no definido.
alert( x );
¿Cómo puedo detectar este error?
A menudo he hecho
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert(''Hey moron, define this bad boy.'');
}
}
A menudo uso la forma más sencilla:
var variable;
if (variable === undefined){
console.log(''Variable is undefined'');
} else {
console.log(''Variable is defined'');
}
EDITAR:
Sin inicializar la variable, se lanzará la excepción "Uncaught ReferenceError: la variable no está definida ..."
El error te dice que x
ni siquiera existe! No se ha declarado , lo que es diferente a que se le asigne un valor.
var x; // declaration
x = 2; // assignment
Si declaraste x
, no obtendrías un error. Obtendrí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 recibió inicialmente.
if(typeof x !== "undefined") {
alert(x);
}
Esto es verificar el tipo del valor almacenado en x
. Solo se devolverá undefined
cuando x
no se haya declarado O si se ha declarado y aún no se ha asignado.
El operador void
devuelve undefined
para cualquier argumento / expresión que se le pase. para que puedas probar el resultado (en realidad, algunos minificadores cambian tu 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
}
En JavaScript, null
es un objeto. Hay otro valor para las cosas que no existen, undefined
. El DOM devuelve un null
para casi todos los casos en los que no encuentra alguna estructura en el documento, pero en el propio JavaScript no undefined
es el valor utilizado.
Segundo, no, no hay un equivalente directo. Si realmente desea verificar específicamente para null
, haga:
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 que typeof
tratará una variable no declarada y una variable declarada con el valor de undefined
como equivalente.
Pero, para verificar si una variable está declarada y no está undefined
:
if (typeof yourvar !== ''undefined'') // Any scope
Si sabe que la variable existe y desea verificar si hay algún valor almacenado en ella:
if (yourvar !== undefined)
Si desea saber si un miembro existe de manera independiente 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 truthy :
if (yourvar)
La única manera de probar realmente si una variable undefined
está undefined
es hacer lo siguiente. Recuerda, undefined 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 se haya definido (con un valor de NULL o 0, por ejemplo).
La respuesta aceptada es correcta. Solo quería añadir una opción más. También puedes usar el bloque try ... catch
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 bloque catch
, que es un poco desordenado, ya que crea un ámbito de nivel de bloque. Y, por supuesto, el ejemplo está extremadamente simplificado para responder a la pregunta, no cubre las mejores prácticas en el manejo de errores;).
Otra posible "solución" es usar el objeto de window
. Evita el problema de error de referencia cuando se encuentra en un navegador.
if (window.x) {
alert(''x exists and is truthy'');
} else {
alert(''x does not exist, or exists and is falsy'');
}
Podemos comprobar undefined
siguiente manera
var x;
if (x === undefined) {
alert("x is undefined");
} else {
alert("x is defined");
}
Técnicamente, la solución adecuada es (creo):
typeof x === "undefined"
A veces se puede hacer perezoso y usar
x == null
pero eso permite que tanto una variable indefinida x como una variable x que contiene null devuelvan verdadero.
También puede utilizar 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);
Una versión aún más fácil y abreviada sería:
if (!x) {
//Undefined
}
O
if (typeof x !== "undefined") {
//Do something since x is defined.
}
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 una verificación del valor para asegurarme de que la variable no solo existe, sino que también se le ha asignado un valor. La segunda condición verifica si la variable también ha sido instanciada, porque si la variable se ha definido pero no se ha creado una instancia (vea el ejemplo a continuación), aún generará un error si intenta hacer referencia al valor en su código.
No instanciado - var my_variable;
Instanciado - 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 se ha definido y se ha creado una instancia así ...
if ( varExists(variable_name) ) { // checks that it DOES exist }
o para probar que no ha sido definido e instanciado uso ...
if( !varExists(variable_name) ) { // checks that it DOESN''T exist }