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
}

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){ ... }

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.


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

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




0

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


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.


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}')

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/

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.