Pregunta Cómo verificar una variable no definida en JavaScript


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?


769
2018-05-13 14:09


origen


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 falla encontrar alguna estructura en el documento, pero en el propio JavaScript undefined es el valor usado

Segundo, no, no hay un equivalente directo. Si realmente desea verificar específicamente para null, hazlo

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 es undefined:

if (typeof yourvar !== 'undefined') // Any scope

Si sabe que la variable existe, y quiere 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 verdad:

if (yourvar)

Fuente


1488
2018-05-13 14:11



La única forma de probar verdaderamente si una variable es undefined es hacer lo siguiente. Recuerde, undefined es un objeto en JavaScript.

if (typeof someVar === 'undefined') {
  // Your variable is undefined
}

Algunas de las otras soluciones en este hilo lo harán creer que una variable no está definida aunque haya sido definida (con un valor NULL o 0, por ejemplo).


301
2018-05-13 14:53



Técnicamente, la solución adecuada es (creo):

typeof x === "undefined"

A veces puede ser flojo y usar

x == null

pero eso permite que tanto una variable indefinida x, como una variable x que contenga nulo, devuelvan verdadero.


59
2018-05-13 14:12



Una versión aún más fácil y más taquigráfica sería:

if (!x) {
   //Undefined
}

O

if (typeof x !== "undefined") {
    //Do something since x is defined.
}

16
2018-05-13 14:26



A menudo he hecho:

function doSomething(variable)
{
    var undef;

    if(variable === undef)
    {
         alert('Hey moron, define this bad boy.');
    }
}

14
2018-05-13 14:45



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);


3
2018-02-12 12:02



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 lanzará la excepción "Uncaught ReferenceError: la variable no está definida ..."


1
2017-12-09 08:44



Otra posible "solución" es usar el window objeto. Evita el problema de error de referencia cuando está en un navegador.

if (window.x) {
    alert('x exists and is truthy');
} else {
    alert('x does not exist, or exists and is falsy');
}

1
2017-11-13 20:16



Podemos verificar undefined como sigue

var x; 

if (x === undefined) {
    alert("x is undefined");
} else {
     alert("x is defined");
}

0
2017-07-04 17:17



La respuesta aceptada es correcta. Solo quería agregar una opción más. También puedes usar try ... catch bloquear 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
}

Ser consciente de catch bloque, que es un poco desordenado, ya que crea un ámbito de 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;).


0
2017-08-11 17:25