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.