Como verifico a existência de um objeto em JavaScript?
Os seguintes trabalhos:
if (!null)
alert("GOT HERE");
Mas isso gera um erro:
if (!maybeObject)
alert("GOT HERE");
O erro:
maybeObject
não está definido.
Você pode usar o typeof
operador com segurança em variáveis indefinidas.
Se tiver sido atribuído algum valor, incluindo nulo, typeof retornará algo diferente de indefinido. typeof sempre retorna uma string.
Portanto
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
!==
a comparação.Há muitas meias-verdades aqui, então pensei em deixar algumas coisas mais claras.
Na verdade, você não pode dizer com precisão se existe uma variável (a menos que queira agrupar cada segunda linha em um bloco try-catch).
O motivo é que o Javascript tem esse notório valor, o
undefined
que surpreendentemente não significa que a variável não está definida ou que não existeundefined !== not defined
Portanto, tanto uma variável que existe como outra que não existe podem informar o
undefined
tipo.Quanto @ equívoco de Kevin,
null == undefined
. Isso se deve à coerção de tipos, e é a principal razão pela qual Crockford continua dizendo a todos que não têm certeza desse tipo de coisa que sempre usem um operador de igualdade estrita===
para testar possíveis valores falsos.null !== undefined
dá-lhe o que você poderia esperar. Observe também que essafoo != null
pode ser uma maneira eficaz de verificar se uma variável não é nemundefined
nemnull
. Claro que você pode ser explícito, porque isso pode ajudar na legibilidade.Se você restringir a pergunta para verificar se existe um objeto,
typeof o == "object"
pode ser uma boa idéia, exceto se você não considerar objetos de matrizes, pois isso também será relatado como o tipoobject
que pode deixar você um pouco confuso. Sem mencionar quetypeof null
também lhe dará oobject
que está simplesmente errado.A área primal onde você realmente deve ter cuidado com
typeof
,undefined
,null
,unknown
e outros mistérios são objetos de acolhimento. Eles não podem ser confiáveis. Eles são livres para fazer quase qualquer coisa suja que quiserem. Portanto, tenha cuidado com eles, verifique a funcionalidade, se puder, porque é a única maneira segura de usar um recurso que talvez nem exista.fonte
foo!=null
produzirá um ReferenceError sefoo
não estiver definido. Portanto, é melhor usartypeof
, a menos que você esteja planejando capturar a exceção.undefined !== not defined
&&foo != null can be an effective way to check if a variable is neither 'undefined' nor 'null'
. Eu não disse que!= null
é bom para verificar se existe. Você está tirando isso do contexto. (Eu também mencionou que é uma nota, não estritamente relacionados com o tema da pergunta do OP)undefined
. Eles não são os mesmos.(note) it can be used !== you should use
. Use o bom senso durante a leitura. Quando a variável é declarada (lista de parâmetros ou outro local) e você deseja verificar se tem um valor,!=
nulo é completamente seguro. É um caso de uso diferente do que o OP solicitou, por isso o intrudi como nota. O parágrafo inteiro é sobre a postagem de @ Kevin e digite coerção btw. Como você pode notar, se você ler atentamente.!= null
quando você sabe que a variável tenha sido declarada. Isso é muito útil para verificar argumentos de função, considere:var hasValue = function(foo) {return foo != null}
Você pode usar:
fonte
Dois caminhos.
typeof para variáveis locais
Você pode testar um objeto local usando typeof:
janela para variáveis globais
Você pode testar um objeto global (um definido no escopo global) inspecionando o objeto da janela:
fonte
Se esse é um objeto global, você pode usar
if (!window.maybeObject)
fonte
window.hasOwnProperty('maybeObject')
é um pouco mais legível, se for um objeto globalVocê pode usar "typeof".
fonte
O tópico foi aberto há algum tempo. Enquanto isso, o uso de um operador ternário é a opção mais simples:
fonte
var maybeObject = typeof maybeObject !== "undefined" ? Chart:false;
e verifique se nãofalse
.Eu costumava fazer uma
if(maybeObject)
verificação nula nos meus javascripts.Portanto, apenas se
maybeObject
- for um objeto, o alerta será mostrado. Eu tenho um exemplo no meu site.https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes
fonte
maybeObject
for0, 0.0, or ""
, ele verifica como falsoAcabei de testar os exemplos typeOf de cima e nenhum funcionou para mim; portanto, usei isso:
fonte
Além de verificar a existência do objeto / variável, você pode fornecer uma saída de "pior caso" ou, pelo menos, prendê-la em um alerta para que ela não seja despercebida.
Exemplo de função que verifica, fornece alternativas e captura erros.
Eu criei isso também porque o objeto que eu estava passando para ele poderia ser x, xm, xm [z] e typeof xm [z] falharia com um erro se xm não existisse.
Espero que ajude. (BTW, eu sou iniciante com JS)
fonte
para mim isso funcionou para um objeto DOM:
fonte
Se você se importa apenas com a sua existência (foi declarada?), A resposta aprovada é suficiente:
Se você se importa com o valor real, deve adicionar:
Como
typeof( null ) == "object"
por exemplo
bar = { x: 1, y: 2, z: null}
Dessa forma, você verifica se não é nem
null
ouundefined
, e comotypeof
não existe erro se o valor não existir mais um&&
curto-circuito, você nunca receberá um erro em tempo de execução.Pessoalmente, sugiro adicionar um auxiliar fn em algum lugar (e não vamos confiar
typeof()
):fonte
fonte
fonte
defina o valor da Caixa de texto como um quadro para o quadro embutido usando o painel com guias div alignmnt. Então, antes de tudo, antes de definir o valor, precisamos verificar a moldura dos painéis com guias disponíveis ou não usar os seguintes códigos:
Código Javascript:
fonte
zero e nulo são ponteiros implícitos. Se você não estiver fazendo aritmética, comparação ou impressão de '0' na tela, não há necessidade de digitá-la. Está implícito. Como está implícito. Typeof também não é necessário pelo mesmo motivo. Ver.
se (obj) console.log ("existe");
Eu não vi o pedido de um não ou então não está incluído como. Tanto quanto eu amo conteúdo extra que não se encaixa na pergunta. Vamos mantê-lo simples.
fonte
if (!maybeObject)
- mas, de fato, o título pede o contrário.Acho que é mais fácil assim
fonte
Ou, você pode começar a usar o meu método existir () exclusivo e poder fazer coisas consideradas impossíveis. ou seja:
Coisas como:,
exists("blabla")
ou até:exists("foreignObject.guessedProperty.guessNext.propertyNeeded")
também são possíveis ...fonte