Como determino se a variável é undefined
ou null
?
Meu código é o seguinte:
var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
// DO SOMETHING
};
<div id="esd-names">
<div id="name"></div>
</div>
Mas se eu fizer isso, o intérprete JavaScript interrompe a execução.
Respostas:
Você pode usar as qualidades do operador de igualdade abstrata para fazer isso:
Porque
null == undefined
é verdade, o código acima irá pegar ambosnull
eundefined
.fonte
const y = undefined; y == null;
Ele deve retornartrue
y
constante, mas deseja compararabc
(nãoy
). Quando testeiy
viaconsole.log(y == null);
Chrome e Firefox, obtivetrue
como resultado. Se você encontrou um erro, talvez tenha tentado usar o operador de atribuição em=
vez da comparação, o==
que faria sentido retornar um erro, poisconst
não pode ser reatribuído.null
ou seráundefined
aprovado se a variável for igual0
? A questão não é sobre o teste de um valor verdadeiro, mas sim o teste explícito denull
ouundefined
.A maneira padrão de capturar
null
eundefined
simultaneamente é esta:--qual é 100% equivalente ao mais explícito, mas menos conciso:
Ao escrever JS profissional, é dado como certo que a igualdade de tipo e o comportamento de
==
vs===
são entendidos. Portanto, usamos==
e apenas comparamos comnull
.Edite novamente
Os comentários sugerindo o uso de
typeof
estão simplesmente errados. Sim, minha solução acima causará um ReferenceError se a variável não existir. Isto é uma coisa boa. Este ReferenceError é desejável: ajudará você a encontrar seus erros e corrigi-los antes de enviar seu código, assim como os erros do compilador em outros idiomas. Usetry
/catch
se você estiver trabalhando com informações sobre as quais não tem controle.Você não deve ter nenhuma referência a variáveis não declaradas no seu código.
fonte
!==
vez de!=
.undefined
, como qualquer declarada mas variável não inicializada seria, ou seja,var someVar;
para que o seu argumento não realmente realizar-seCombinando as respostas acima, parece que a resposta mais completa seria:
Isso deve funcionar para qualquer variável que não seja declarada ou declarada e definida explicitamente como nula ou indefinida. A expressão booleana deve ser avaliada como false para qualquer variável declarada que tenha um valor não nulo real.
fonte
typeof
é um operador, não uma função, por isso não precisa dos parênteses, mas eu aprecio os parênteses, no entanto - simplesmente por ter clareza na leitura.variable == null
fonte
undefined
avalia igual anull
./*jshint eqnull:true */
na parte superior do seu documento ou função JS, e o JSHint deixará de avisá-lo sobre seus usos== null
.==
está quebrado. O coercitivoif(variable == null)
nesta resposta faz todo o sentido para mim ...será avaliado como true se o valor não for:
nulo
Indefinido
NaN
sequência vazia ("")
0 0
falso
fonte
if (EmpName)
. Se jáundefined
vai ser falso.var EmpName; if (EmpName)
. Onde a variável é definida, mas não é atribuída um valor.A
attr()
função jQuery retorna uma string em branco ou o valor real (e nuncanull
ouundefined
). A única vez que retornaundefined
é quando o seletor não retorna nenhum elemento.Então, você pode querer testar uma string em branco. Como alternativa, como cadeias em branco, nulas e indefinidas são falsas, você pode fazer isso:
fonte
ReferenceError: EmpName is not defined
undefined
se o atributo não existir no elemento (não apenas se o seletor não tiver elementos correspondentes, conforme a resposta). Por exemplo, umimg
semsrc
retornariaundefined
para$('img').attr('src');
Eu vim para escrever minha própria função para isso. JavaScript é estranho.
É utilizável em literalmente qualquer coisa. (Observe que isso também verifica se a variável contém algum valor utilizável . Mas, como essas informações geralmente também são necessárias, acho que vale a pena postar). Por favor, considere deixar uma nota.
Compatível com TypeScript.
Esta função deve fazer exatamente a mesma coisa que a
empty()
função do PHP (consulteRETURN VALUES
)Considera
undefined
,null
,false
,0
,0.0
,"0"
{}
,[]
como esvaziar."0.0"
,NaN
," "
,true
São considerados não-vazia.fonte
{ }
. Este é um problema de linguagem comum e tolo, mas eu tinha esquecido. Todas as minhas pesquisas mostram respostas para valores nulos indefinidos ou comparações fracas de igualdade (==), mas não para uma igualdade estrita (===) ou equivalente. E então aqui, na sua resposta em -1, na parte inferior da página (antes de eu votar), está a resposta que me escapou.Object.keys( obj ).length < 1
ou talvez === 0, assumindo que nunca será -1. De qualquer forma, votou para 0, woo. : p==
para===
aqui, então isso seria uma função razoável.Se a variável que você deseja verificar for global, faça
Essa maneira de verificar não gera um erro, mesmo que a
yourVarName
variável não exista.Exemplo: quero saber se meu navegador suporta a API do histórico
Como isso funciona:
window
é um objeto que contém todas as variáveis globais como suas propriedades e, em JavaScript, é legal tentar acessar uma propriedade de objeto não existente. Sehistory
não existir,window.history
retornaráundefined
.undefined
é falsey, portanto, o código em umif(undefined){}
bloco não será executado.fonte
null
ouundefined
não, nem seu JavaScript está sendo executado fora de um navegador (por exemplo, no Node.js.). Vai também globals tratar definida como0
,false
ou''
o mesmo que aqueles que são não declaradas ouundefined
ounull
, o que é geralmente bem.O mais curto e fácil:
isso avaliará true se EmpName for:
fonte
Provavelmente, a maneira mais curta de fazer isso é:
Aqui está a prova:
Mostrar snippet de código
E aqui estão mais detalhes sobre
==
(fonte aqui )BÔNUS : o motivo pelo qual
===
é mais claro do que==
(veja a resposta agc )fonte
Acabei de ter esse problema, ou seja, verificar se um objeto é nulo.
Eu simplesmente uso isso:
Por exemplo:
fonte
Como você está usando jQuery , é possível determinar se uma variável é indefinida ou se seu valor é nulo usando uma única função.
fonte
ReferenceError: s is not defined
para o primeiro exemplo.O elemento de verificação do jQuery não é nulo:
fonte
Em JavaScript, de acordo com meu conhecimento, podemos verificar uma variável indefinida, nula ou vazia, como abaixo.
Verifique todas as condições:
fonte
var
é uma palavra reservada, isso vai darSyntaxError
Você pode simplesmente usar o seguinte (eu sei que existem maneiras mais curtas de fazer isso, mas isso pode facilitar a observação visual, pelo menos para outras pessoas que olham o código).
fonte
A maneira mais fácil de verificar é:
fonte
false
, o que é potencialmente indesejável.undefined
,null
e algumas outras coisas como cadeia vazia, +0, -0NaN
efalse
passar.!
operador coage o operand- aquivariable
- para booleana: ecma-international.org/ecma-262/#sec-tobooleanCom a solução abaixo:
Eu posso verificar o seguinte:
fonte
Para testar se uma variável é nula ou indefinida, uso o código abaixo.
fonte
typeof
e compare com aundefined
linha reta, não como uma corda. Isso funciona, mas o operador extra não tem efeito a não ser torná-lo mais detalhado.Eu executo este teste no console do Chrome. Usando (vazio 0), você pode verificar indefinido:
fonte
Vamos olhar para isso,
Acima, a variável é declarada apenas como
apple
. Nesse caso, se chamarmos método,alert
ele será exibido indefinido.No segundo, ele exibe nulo, porque a variável de
apple
valor é nula.Portanto, você pode verificar se um valor é indefinido ou nulo.
fonte
Melhor maneira:
fonte
Porque === verifica o tipo e o valor. O tipo de ambos é diferente, mas o valor é o mesmo.
fonte
fonte
typeof
nunca cederáundefined
, apenas a corda'undefined'
. Além disso,i == null
já é verdade sei
éundefined
, portanto, o segundo booleano seria redundante, mesmo que funcionasse.A
foo == null
verificação deve executar o truque e resolver o caso "indefinido OU nulo" da maneira mais curta. (Não considerando o caso "foo não é declarado".) Mas as pessoas que costumam ter 3 iguais (como a melhor prática) podem não aceitá-lo. Basta olhar para eqeqeq ou triple-iguais em eslint e tslint ...A abordagem explícita, quando estamos verificando se uma variável é
undefined
ounull
separadamente, deve ser aplicada neste caso, e minha contribuição para o tópico (27 respostas não negativas por enquanto!) É usarvoid 0
como uma maneira curta e segura de executar a verificação paraundefined
.O uso
foo === undefined
não é seguro porque indefinido não é uma palavra reservada e pode ser sombreada ( MDN ). O uso dotypeof === 'undefined'
cheque é seguro, mas se não vamos nos importar com o caso não declarado, a seguinte abordagem pode ser usada:fonte
se você criar uma função para verificá-la:
fonte
Chamar typeof null retorna um valor de "objeto", pois o valor especial nulo é considerado uma referência de objeto vazio. O Safari da versão 5 e o Chrome da versão 7 têm uma peculiaridade em que chamar typeof em uma expressão regular retorna "function", enquanto todos os outros navegadores retornam "object".
fonte
Você só pode usar o segundo: pois ele verificará tanto a definição quanto a declaração
fonte
Ainda acho que a melhor maneira / segura de testar essas duas condições é converter o valor em uma string:
fonte
Você pode verificar se o valor é indefinido ou nulo usando simplesmente typeof:
fonte
null
. Não entendo por que respostas novas e incorretas estão sendo fornecidas a uma pergunta que recebeu uma resposta correta e completa há muitos anos. Você acha que as respostas atuais são de alguma forma insuficientes?if(x==null)
é uma má ideia em JavaScript. Julgue com"=="
- pode causar uma coerção inesperada do tipo e não pode ser lida pelo CoffeeScript, nunca use "==" ou "! =" No julgamento da condição!if(x)
será melhor, mas tenha cuidado com 0 e "" . Será tratado como falso , e não o método igual com"!= null"
é verdadeiro .Consulte Práticas recomendadas para JavaScript .
fonte
==
para compararnull
é a maneira padrão de capturanull
eundefined
em JS. A coerção de tipo com==
não é um risco nesse contexto específico e, de fato, está sendo aproveitada para atingir o objetivo de capturar ambosnull
eundefined
simultaneamente. Gaste mais tempo trabalhando com o idioma antes de optar por oferecer respostas incorretas e enganosas a perguntas que foram resolvidas satisfatoriamente anos atrás.