verificação de javascript para não nulo


132

Abaixo está um trecho de código, onde recuperamos um valor de formulário. Antes do processamento adicional, verifique se o valor não é nulo.

var val = document.FileList.hiddenInfo.value;
alert("val is " + val);  // this prints null which is as expected
if (val != null)
{
   alert("value is "+val.length); // this returns 4
}
else
{
   alert("value* is null");
}

Alguma idéia de por que isso acontece tão .. ??


2
A CW aconteceu por causa de mais de 6 usuários editando a pergunta.
VOCÊ

! == em vez de! =
GetBackerZ

Respostas:


78

É porque val não é null, mas contém 'null'como uma string.

Tente verificar com 'null'

if ('null' != val)

Para uma explicação de quando e por que isso funciona, consulte os detalhes abaixo .


2
deve ser if (null = val!) de alguma forma ele não estava trabalhando com as citações
Ananda

Mr.X na questão, null era tão corda ... o seu caso é provavelmente diferente
Arsen Mkrtchyan

145

isso fará o truque para você

if (!!val) {
    alert("this is not null")
} else {
    alert("this is null")
}

22
enquanto tecnicamente isso funciona, um duplo não (!!) é um falso-passo de programação. É realmente o equivalente a if(val), que é muito mais claro de se ler. Gostaria de manter isso (fyi Ujwal, !! val, tecnicamente, também deve funcionar em C ou C ++). Veja aqui os valores de ' veracidade
Will Buck

2
como sobre se (booleano (val)!)
thedjaney

1
!! é apenas um duplo negativo, então está literalmente dizendo se (val.exists). Eu ainda gosto da aparência!
Kurai Bankusu

12
isso falhará se, val = 0desde que for !!0avaliado como falso
punkrockpolly

3
Não é um simples duplo negativo. É um duplo negativo transformador. Você está basicamente transformando a variável em um booleano. Não há muito a dizer sobre o assunto, mas basta dizer que nos casos em que a variável é 0, false, null, undefinedou algum tal valor que resolve truecom um!, Você está indo para obter falsepara !!. Deve ser usado com moderação, se houver.
Guy Passy

83

Existem três maneiras de verificar "não nulo". Minha recomendação é usar a versão estrita não.

1. Versão Estrita Não

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

A Versão Estrita Não usa o "Algoritmo Estrito de Comparação de Igualdade" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6 . O !==desempenho é mais rápido que o !=operador, porque o algoritmo de comparação estrita de igualdade não tipifica valores.

2. Versão Não Estrita

if (val != 'null') { ... }

A versão não estrita usa o "Algoritmo de comparação de igualdade abstrata" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 . O !=desempenho é mais lento que o !==operador, porque o algoritmo de comparação de igualdade de igualdade abstrai valores.

3. Double Not Version

if (!!val) { ... }

A versão Double Not Version !!tem desempenho mais rápido do que a versão Strict Not !==e a Non Strict Not Version !=( https://jsperf.com/tfm-not-null/6 ). No entanto, será estereotipado valores "Falsey" como undefinede NaNem False ( http://www.ecma-international.org/ecma-262/5.1/#sec-9.2 ), que pode levar a resultados inesperados, e tem pior legibilidade porque nullnão é declarado explicitamente.


Isso é muito estranho. !!valtrabalhou para mim, mas val!==nullnão. Por que é isso?
TheLogicGuy

@TheLogicGuy - Qual é o tipo de dados val? console.log(typeof val).
precisa saber é o seguinte

número. o código remove valores "ruins" da matriz (nulo, 0 etc). Aqui está o código: pastebin.com/L7Z1BtuL
TheLogicGuy 6/16

1
@TheLogicGuy - Seu problema real não tem nada a ver com nulo. O NaN não está filtrando corretamente - isso sempre retornará verdadeiro. Isso deve funcionar:! (IsNaN (val) && (tipo de val! == "indefinido")). Em Javascript, existe um conceito conhecido como "Truthy" e "Falsey". O operador duplo não !!removerá mais do que apenas null. Ele também será convertido NaNe undefinedfalso. E é por isso que sua matriz filtra corretamente ao usar o não operador duplo !!.
Tfmontague 06/08/19

30

Use !==como o !=levará a um mundo de estranheza não-transitória na tabela de verdade do JavaScript.


A menos que você queira verificar especificamente por undefinedou null. Nesse caso val != null, retornará truepara undefinedou nullnão para outros valores de falsey como 0.
Eric H

8

Você deve usar o not equalsoperador de comparação estrita !==para que, se o usuário inserir "null", você não acessará o else.


1
Susan Null não seria feliz se o seu nome não foi aceito em um formulário de entrada de dados lol
Andez

5

Possivelmente, porque o valor de valé realmente a string "null"e não o valor null.


3

Isso deve funcionar bem ..

   if(val!= null)
    {
       alert("value is "+val.length); //-- this returns 4
    }
    else
    {
       alert("value* is null");
    }

2

Se você deseja poder incluir 0 como um valor válido:

if (!!val || val === 0) { ... }

1

Isso funcionará:

if (val) {
    alert("Not null");
} else {
    alert("Null");
}

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.