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 .. ??
javascript
ria
fonte
fonte
Respostas:
É porque val não é
null
, mas contém'null'
como uma string.Tente verificar com 'null'
Para uma explicação de quando e por que isso funciona, consulte os detalhes abaixo .
fonte
isso fará o truque para você
fonte
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 ' veracidadeval = 0
desde que for!!0
avaliado como falso0
,false
,null
,undefined
ou algum tal valor que resolvetrue
com um!, Você está indo para obterfalse
para !!. Deve ser usado com moderação, se houver.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
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
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
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" comoundefined
eNaN
em False ( http://www.ecma-international.org/ecma-262/5.1/#sec-9.2 ), que pode levar a resultados inesperados, e tem pior legibilidade porquenull
não é declarado explicitamente.fonte
!!val
trabalhou para mim, masval!==null
não. Por que é isso?val
?console.log(typeof val)
.!!
removerá mais do que apenasnull
. Ele também será convertidoNaN
eundefined
falso. E é por isso que sua matriz filtra corretamente ao usar o não operador duplo!!
.Use
!==
como o!=
levará a um mundo de estranheza não-transitória na tabela de verdade do JavaScript.fonte
undefined
ounull
. Nesse casoval != null
, retornarátrue
paraundefined
ounull
não para outros valores de falsey como0
.Você deve usar o
not equals
operador de comparação estrita!==
para que, se o usuário inserir"null"
, você não acessará oelse
.fonte
Possivelmente, porque o valor de
val
é realmente a string"null"
e não o valornull
.fonte
Isso deve funcionar bem ..
fonte
Se você deseja poder incluir 0 como um valor válido:
fonte
Isso funcionará:
fonte
Verifique https://softwareengineering.stackexchange.com/a/253723
será avaliado como true se o valor não for:
fonte