Como verifico uma variável se é
null
ouundefined
e qual é a diferença entre thenull
eundefined
?Qual é a diferença entre
==
e===
(é difícil pesquisar no Google por "===")?
javascript
null
undefined
MUG4N
fonte
fonte
==
e===
é bem descrita aqui .Respostas:
É a variável
null
:... mas observe que o último também será verdadeiro se
a
forundefined
.É
undefined
:... mas, novamente, observe que o último é vago; também será verdade se
a
fornull
.Agora, apesar do acima exposto, a maneira usual de verificar esses itens é usar o fato de serem falsos :
Isso é definido pelo ToBoolean na especificação.
Ambos são valores geralmente usados para indicar a ausência de algo.
undefined
é o mais genérico, usado como o valor padrão das variáveis até que elas recebam algum outro valor, como o valor dos argumentos da função que não foram fornecidos quando a função foi chamada e como o valor que você obtém ao perguntar a um objeto para uma propriedade que não possui. Mas também pode ser usado explicitamente em todas essas situações. (Há uma diferença entre um objeto não ter uma propriedade e ter a propriedade com o valorundefined
; há uma diferença entre chamar uma função com o valorundefined
para um argumento e deixar esse argumento totalmente desativado.)null
é um pouco mais específico queundefined
: é uma referência de objeto em branco. É claro que o JavaScript é tipicamente digitado, mas nem todas as coisas com as quais ele interage são digitadas. Se uma API como o DOM nos navegadores precisar de uma referência de objeto em branco, usaremos issonull
, nãoundefined
. E da mesma forma, agetElementById
operação do DOM retorna uma referência de objeto - válida (se encontrou o elemento DOM) ounull
(se não encontrou).Curiosamente (ou não), eles são seus próprios tipos. Ou seja,
null
é o único valor no tipo Nulo eundefined
é o único valor no tipo Indefinido.A única diferença entre eles é que
==
fará coerção de tipo para tentar obter os valores correspondentes e===
não corresponderá. Então, por exemplo,"1" == 1
é verdade, porque"1"
obriga a1
. Mas"1" === 1
é falso , porque os tipos não correspondem. ("1" !== 1
é verdadeiro.) O primeiro passo (real) de===
é "Os tipos dos operandos são os mesmos?" e se a resposta for "não", o resultado seráfalse
. Se os tipos são os mesmos, ele faz exatamente o que==
faz.A coerção de tipos usa regras bastante complexas e pode ter resultados surpreendentes (por exemplo,
"" == 0
é verdade).Mais nas especificações:
==
também chamada de igualdade "solta")===
)fonte
if (a) { ... }
significaria "sea
for verdade", em que "verdade" é um valor diferente de zero, não nulo, indefinido, não falso, falso e não vazio. :-)null
não é um objeto , é uma referência a um objeto que significa "nenhum objeto". Isso é importante, porque é o que é usado com interfaces fornecidas pelo host quando elas fornecem referências a objetos, mas não têm uma para fornecer (por exemplo,node.nextSibling
quandonode
é o último elemento em seu pai ougetElementById
quando não há elemento com esse ID). A tecnologia que o host usa para isso pode não ser tão flexível quanto o JavaScript é sobre tipos de variáveis / propriedades; portanto, era necessário ter umanull
obj ref (ao contrário deundefined
).typeof null
retornar "objeto" faz sentido. O único outro valor que faria sentido seria "nulo", pois definitivamente deveria retornar algo diferente detypeof undefined
. null representa uma referência de objeto nulo, o que, no mínimo, significa que a variável que o contém destina-se a algum tipo de 'objeto'. Se foi um erro, foi um bom erro. De qualquer forma, em relação à resposta, é bom saber a dica sobreundefined
! ==undefined
durante scripts entre janelas, especialmente para fins de depuração.A diferença é sutil.
No JavaScript, uma
undefined
variável é uma variável que nunca foi declarada ou nunca atribuiu um valor. Digamos que você declara,var a;
por exemplo, entãoa
seráundefined
, porque nunca foi atribuído nenhum valor.Mas se você atribuir,
a = null;
entãoa
seránull
. Em JavaScript,null
é um objeto (tentetypeof null
em um console JavaScript, se você não acredita em mim), o que significa que nulo é um valor (na verdade, mesmoundefined
é um valor).Exemplo:
Isso pode ser útil em argumentos de função. Você pode querer ter um valor padrão, mas considere nulo aceitável. Nesse caso, você pode fazer:
Se você omitir o
optional
parâmetrodoSomething(1, 2) then
opcional será a"three"
string, mas se você passardoSomething(1, 2, null)
, será opcionalnull
.Quanto aos comparadores iguais
==
e estritamente iguais===
, o primeiro é do tipo fraco, enquanto o estritamente igual também verifica o tipo de valores. Isso significa que0 == "0"
retornará verdadeiro; while0 === "0"
retornará false, porque um número não é uma string.Você pode usar esses operadores para verificar entre
undefined
umnull
. Por exemplo:O último caso é interessante, porque permite verificar se uma variável é indefinida ou nula e mais nada:
fonte
A especificação é o lugar para obter respostas completas para essas perguntas. Aqui está um resumo:
x
, você pode:null
por comparação direta usando===
. Exemplo:x === null
undefined
um dos dois métodos básicos: comparação direta comundefined
outypeof
. Por várias razões , eu prefirotypeof x === "undefined"
.null
eundefined
use==
e confie nas regras de coerção do tipo ligeiramente arcano que significa quex == null
faz exatamente o que você deseja.==
e===
é que, se os operandos são de tipos diferentes,===
sempre retornamfalse
enquanto==
convertem um ou ambos os operandos no mesmo tipo usando regras que levam a algum comportamento pouco intuitivo. Se os operandos forem do mesmo tipo (por exemplo, ambos são strings, como natypeof
comparação acima),==
e===
se comportarão exatamente da mesma maneira.Mais leitura:
fonte
basta verificar se uma variável tem um valor válido como este:
retornará true se a variável não contiver:
fonte
Indefinido
Isso significa que a variável ainda não foi inicializada.
Exemplo:
é igual a (==)
Ele apenas verifica se o valor é igual a não o tipo de dados.
Exemplo:
Porque verifica apenas o valor.
Iguais estritos (===)
Verifica se o valor e o tipo de dados devem ser iguais.
Exemplo:
Porque verifica o tipo de dados x é um tipo primitivo e y é um objeto booleano.
fonte
O anúncio 1.
null
não é um identificador para uma propriedade do objeto global, comoundefined
pode serMostrar snippet de código
Anúncio 2. Os
===
valores e tipos de verificação. Eles==
não exigem os mesmos tipos e fizeram uma conversão implícita antes da comparação (usando.valueOf()
e.toString()
). Aqui você tem todos ( src ):E se
== (sua negação ! = )
=== (sua negação ! == )
fonte
document.all == null
edocument.all !== null
Se sua verificação (lógica) é negativa (!) E você deseja capturar JS
null
eundefined
(como diferentes navegadores fornecerão resultados diferentes), você usaria a comparação menos restritiva: por exemplo:Isso irá capturar ambos
null
eundefined
fonte
Tente com lógica diferente . Você pode usar o código abaixo para verificar todas as quatro (4) condições para validação, como não nulo, não em branco, não indefinido e não zero, use apenas este código (! (! (Variável))) em javascript e jquery.
}
fonte