Prueba si algo no está indefinido en JavaScript

Respuestas:

345

response[0] no está definido, verifique si está definido y luego verifique el título de su propiedad.

if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){
    //Do something
}
amosrivera
fuente
20
A pesar del número de votos, esta no es una buena manera de realizar la verificación porque undefinedno es una palabra clave de JavaScript (aunque todos parecen pensar que sí). Si lo desea, puede crear una variable llamada undefinedy luego esta verificación será incorrecta. La única forma correcta es verificar (typeof myVar !== 'undefined').
BadHorsie
44
@BadHorsie tiene sentido, actualicé la respuesta con tu comentario.
amosrivera
1
¿Qué pasa si existe una variable y contiene la cadena que dice 'indefinido'?
TomeeNS
@BadHorsie Tu argumento es falso. ¿Por qué debería redefinir undefined?
Robert Siemer
@amosrivera No, su comentario no tenía sentido. Empeoró su respuesta.
Robert Siemer
39

Solo verifique si response[0]no está definido:

if(response[0] !== undefined) { ... }

Si aún necesita verificar explícitamente el título, hágalo después de la verificación inicial:

if(response[0] !== undefined && response[0].title !== undefined){ ... }
Rion Williams
fuente
35

Tuve problemas con todos los otros ejemplos de código anteriores. En Chrome, esta fue la condición que funcionó para mí:

typeof possiblyUndefinedVariable !== "undefined"

Tendré que probar eso en otros navegadores y ver cómo van las cosas, supongo.

Karl Henselin
fuente
2
Lo mismo: descubrí que undefinedtenía que ser una cuerda.
remarsh
Esto debe ser algo nuevo con Chrome (estoy en win Chrome 41 atm). ¡la respuesta aceptada solía funcionar bien! : P
Joe
13

En realidad, debe rodearlo con un bloque Try / Catch para que su código no deje de funcionar. Me gusta esto:

try{
    if(typeof response[0].title !== 'undefined') {
        doSomething();
    }
  }catch(e){
    console.log('responde[0].title is undefined'); 
  }
André Luiz
fuente
Estaba mirando IE 8 y necesitaba hacer un intento de captura.
RonanOD
1
esta es la mejor manera si está probando si una función no está definida
edepperson
lanzar un error para verificar indefinido no es una buena solución. @amosrivera es la mejor solución.
user3658423
@ user3658423: No arroja un error. Solo evita que el script se detenga si la respuesta no está declarada (porque eso arrojaría un error).
André Luiz
A veces los errores pueden ser útiles. Con su solución propuesta, si doSomething () arroja una excepción, todo lo que vería en su consola es "responde [0] .title is undefined", en lugar de un mensaje útil sobre una "excepción no detectada en la línea 123 del archivo xyz .js ". Eventualmente, un segundo desarrollador probablemente comentará la declaración console.log (), lo que hace que sea más difícil para un tercer desarrollador entrar y corregir un error que ocurre en lo profundo de doSomething ().
Eric Seastrand
9

tipo de:

var foo;
if (typeof foo == "undefined"){
  //do stuff
}
Jeffrey Mark Baldridge
fuente
1

Será porque response[0]no está definido.

DavidGouge
fuente
1

Comprueba si condition == null; Resolverá el problema

Tanmay Chandra
fuente
1
Esto debería ser un comentario
ρяσѕρєя K
0

Compruebe si response[0]realmente existe, el error parece sugerir que no.

Exeliano
fuente
0

Primero debe verificar si response[0]está indefinido, y solo si no lo está, verifique el resto. Eso significa que en su caso, response[0]está indefinido.

Alex Turpin
fuente
0

Sé que fui aquí con 7 meses de retraso, pero encontré estas preguntas y parece interesante. Intenté esto en la consola de mi navegador.

try{x,true}catch(e){false}

Si la variable x no está definida, se detecta el error y será falso; de lo contrario, se devolverá verdadero. Por lo tanto, puede usar la función eval para establecer el valor en una variable

var isxdefined = eval('try{x,true}catch(e){false}')
AngeLOL
fuente
1
Un enfoque interesante si pudiera decirlo yo mismo.
Brandito
0

En algunas de estas respuestas hay un malentendido fundamental sobre cómo usarlo typeof.

Incorrecto

if (typeof myVar === undefined) {

Correcto

if (typeof myVar === 'undefined') {

La razón es que typeofdevuelve una cadena. Por lo tanto, debe verificar que haya devuelto la cadena "indefinida" en lugar de undefined(no entre comillas), que es uno de los tipos primitivos de JavaScript . El typeofoperador nunca devolverá un valor de tipo undefined.


Apéndice

Su código podría funcionar técnicamente si usa la comparación incorrecta, pero probablemente no por la razón que cree. No hay una undefinedvariable preexistente en JavaScript: no es una especie de palabra clave mágica con la que se pueda comparar. En realidad, puede crear una variable llamada undefinedy darle el valor que desee.

let undefined = 42;

Y aquí hay un ejemplo de cómo puede usar esto para demostrar que el primer método es incorrecto:

https://jsfiddle.net/p6zha5dm/

BadHorsie
fuente