Como verificar se uma variável não é nula?


Respostas:


399

Eles não são equivalentes. O primeiro executará o bloco após a ifinstrução if myVaré verdade (isto é, avalia trueem condicional), enquanto o segundo executará o bloco se myVarhouver algum valor diferente de null.

Os únicos valores que não são verdadeiros no JavaScript são os seguintes (também conhecidos como valores falsos ):

  • null
  • undefined
  • 0
  • "" (a sequência vazia)
  • false
  • NaN

69

Aqui está como você pode testar se uma variável não é NULL:

if (myVar !== null) {...}

o bloco será executado se myVar não for nulo .. será executado se myVar for indefinido ou falso 0ou NaNou qualquer outra coisa ..


1
No caso de quem está se perguntando ... Isso não verifica se há uma string vazia ("")e indefinida. Veja meu violino como referência: jsfiddle.net/b0tm7yaf
Barrosy

47

Leia este post: http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-2/

Ele tem algumas dicas legais para JavaScript em geral, mas uma coisa mencionada é que você deve procurar nulos como:

if(myvar) { }

Ele também menciona o que é considerado 'falsey' que você pode não perceber.


33
Essa verificação não é realmente segura. Se myvar for 0, falso ou qualquer outro valor falso, o teste falhará (se você pretender apenas verificar se não é nulo). Portanto, use isso apenas para verificar se não é nulo se a variável nunca puder ter outro valor falso.
precisa saber é o seguinte

2
o link não funciona mais. Encontrei uma cópia do que parece ser o post aqui: appendto.com/2010/10/… É estranho, porque o post de Elijah (e o código de exemplo) sugere que ele é o autor, mas não está listado como autor lá ...
thepaulpage

2
Parece que esse site não existe mais. Seria útil se você pudesse incluir as informações na própria publicação, em vez de apenas um link externo.
Apr

Isso não funcionará se o valor estiver presente, mas for 0 (zero)
zmechanic em 23/03

15
  • O código dentro do seu if(myVar) { code }NÃO será executado apenas quando myVarfor igual a: false, 0, "", null, undefined, NaNou você nunca definiu a variável myVar(então, adicionalmente, o código interrompe a execução e lança a exceção).
  • O código dentro do seu if(myVar !== null) {code}NÃO será executado apenas quando myVarfor igual a nullou você nunca o definiu (lança exceção).

Aqui você tem todos ( src )

E se

insira a descrição da imagem aqui

== (sua negação ! = )

insira a descrição da imagem aqui

=== (sua negação ! == )

insira a descrição da imagem aqui


9

Há outro cenário possível que acabei de encontrar.

Fiz uma chamada ajax e recuperei os dados como nulos, em um formato de string. Eu tive que verificar assim:

if(value != 'null'){}

Portanto, null era uma string que dizia "null" em vez de realmente ser nula.

Edição: Deve-se entender que eu não estou vendendo isso da maneira que deve ser feito. Eu tive um cenário em que essa era a única maneira de fazer isso. Não sei por que ... talvez o cara que escreveu o back-end estivesse apresentando os dados incorretamente, mas, independentemente disso, é a vida real. É frustrante ver esse voto negativo de alguém que entende que isso não está certo e, em seguida, votado por alguém que realmente ajuda.


Em vez disso, analise seu valor do que comparar com as nullstrings.
Bergi

1
Esta resposta é legítima, se você entende ou não a sua aplicação. Não gosto de ser votado por postar coisas que realmente funcionaram. Você notou que houve um voto positivo antes de tocá-lo? Isso é porque é um cenário real.
Flat Cat

3
sim, e eu diminuí a votação porque acho que é a solução errada. No caso de uma chamada de ajax, você deve melhor fazer value = JSON.parse(value)e, em seguida, usar o simples e adequada value != nullteste
Bergi

2
Aparentemente você não entende. Eu percebo que você pensa que sim, mas você não.
Flat Cat

4
Eu entendo que era uma solução funcional. Mas não acho que seja um bom conselho, por favor, respeite meu voto negativo.
Bergi

1

se myVarfor nulo, se o bloco não for executado de outra maneira, ele será executado.

if (myVar != null) {...}


Não é a string 'null', mas o valor especial null.
Micah Walter

1

Às vezes, se não foi definido, é melhor estar preparado. Para isso eu usei typeof

if(typeof(variable) !== "undefined") {
    //it exist
    if(variable !== null) {
        //and is not null
    }
    else {
        //but is null
    }
}
else {
    //it doesn't
}

-4

As duas instruções condicionais listadas aqui não são melhores que as outras. Seu uso depende da situação. Você tem um erro de digitação a propósito no segundo exemplo. Deve haver apenas um sinal de igual após o ponto de exclamação.

O primeiro exemplo determina se o valor em myVar é verdadeiro e executa o código dentro do {...}

O segundo exemplo avalia se myVar não é igual a nulo e se esse for o caso, ele executará seu código dentro do {...}

Sugiro dar uma olhada nas declarações condicionais para obter mais técnicas. Quando você estiver familiarizado com eles, poderá decidir quando precisar deles.


12
Isso provavelmente não é um erro de digitação no segundo exemplo. Esse segundo =é crucial e faz uma enorme diferença para a questão. Talvez você não esteja ciente da existência !==e dos ===operadores em JavaScript?
Tim Down

1
Obrigado por apontar isso. Eu imediatamente pensei que era um erro de digitação, mas agora lembro o que não via há algum tempo e havia esquecido.
THE DOCTOR
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.