Teste se algo não está indefinido em JavaScript

Respostas:

345

response[0] não está definido, verifique se está definido e, em seguida, verifique o título da propriedade.

if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){
    //Do something
}
amosrivera
fonte
20
Apesar do número de votos, essa não é uma boa maneira de realizar a verificação porque undefinednão é uma palavra-chave JavaScript (embora todos pareçam pensar que é). Se desejar, você pode criar uma variável chamada undefinede essa verificação estará incorreta. A única maneira correta é verificar (typeof myVar !== 'undefined').
BadHorsie
4
@BadHorsie faz sentido, atualizei a resposta com seu comentário.
amosrivera
1
E se uma variável existir e contiver a sequência que lê 'indefinida'?
TomeeNS 13/02/19
@BadHorsie Seu argumento é falso. Por que devo redefinir undefined?
Robert Siemer
@amosrivera Não, o comentário dele / ela não fez sentido. Você piorou sua resposta.
Robert Siemer 15/02
39

Basta verificar se response[0]está indefinido:

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

Se você ainda precisar verificar explicitamente o título, faça-o após a verificação inicial:

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

Eu tive problemas com todos os outros exemplos de código acima. No Chrome, essa foi a condição que funcionou para mim:

typeof possiblyUndefinedVariable !== "undefined"

Vou ter que testar isso em outros navegadores e ver como vão as coisas, suponho.

Karl Henselin
fonte
2
Mesmo - eu achei que undefinedtinha que ser uma corda.
Remarsh # 18/13
isso deve ser algo novo no chrome (estou no win chrome 41 atm). a resposta aceita costumava funcionar muito bem! : P
joe
13

Na verdade, você deve cercá-lo com um bloco Try / Catch para que seu código não pare de funcionar. Como isso:

try{
    if(typeof response[0].title !== 'undefined') {
        doSomething();
    }
  }catch(e){
    console.log('responde[0].title is undefined'); 
  }
André Luiz
fonte
Eu estava olhando para o IE 8 e precisava tentar pegar.
RonanOD
1
esta é a melhor maneira se você está testando se uma função é indefinido
edepperson
lançar um erro para verificar indefinido não é uma boa solução. @amosrivera é a melhor solução.
user3658423
@ user3658423: Não está lançando um erro. Apenas impede que o script pare se a resposta não for declarada (porque isso geraria um erro).
André Luiz
Às vezes, os erros podem ser úteis. Com a solução proposta, se doSomething () lançar uma exceção, tudo o que você verá no console será "responde [0] .title is undefined", em vez de uma mensagem útil sobre uma "exceção não capturada @ linha 123 do arquivo xyz .js ". Eventualmente, um segundo desenvolvedor provavelmente comentará a instrução console.log (), dificultando a entrada de um terceiro desenvolvedor e corrigindo um erro que ocorre profundamente no doSomething ().
Eric Seastrand
9

tipo de:

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

Será porque response[0]ele próprio é indefinido.

DavidGouge
fonte
1

Verifique se condition == null; Resolverá o problema

Tanmay Chandra
fonte
1
Este deve ser um comentário
ρяσѕρєя K
0

Verifique se você response[0]realmente existe, o erro parece sugerir que não existe.

Exelian
fonte
0

Você deve primeiro verificar se response[0]está indefinido e, se não estiver, verificar o restante. Isso significa que, no seu caso, response[0]é indefinido.

Alex Turpin
fonte
0

Sei que cheguei aqui sete meses atrasado, mas achei essas perguntas e parece interessante. Eu tentei isso no console do meu navegador.

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

Se a variável x for indefinida, o erro será detectado e será falso; caso contrário, retornará true. Então você pode usar a função eval para definir o valor para uma variável

var isxdefined = eval('try{x,true}catch(e){false}')
AngeLOL
fonte
1
Uma abordagem interessante, se assim posso dizer.
Brandito
0

Em algumas dessas respostas, há um mal-entendido fundamental sobre como usar typeof.

Incorreta

if (typeof myVar === undefined) {

Corrigir

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

O motivo é que typeofretorna uma string. Portanto, verifique se ela retornou a string "indefinida" em vez de undefined(não entre aspas), que é um dos tipos primitivos do JavaScript . O typeofoperador nunca vai retornar um valor do tipo undefined.


Termo aditivo

Seu código pode funcionar tecnicamente se você usar a comparação incorreta, mas provavelmente não pelo motivo que você pensa. Não há undefinedvariável preexistente no JavaScript - não é um tipo de palavra-chave mágica com a qual você possa comparar. Na verdade, você pode criar uma variável chamada undefinede atribuir qualquer valor que desejar.

let undefined = 42;

E aqui está um exemplo de como você pode usar isso para provar que o primeiro método está incorreto:

https://jsfiddle.net/p6zha5dm/

BadHorsie
fonte