Em PHP você pode fazer if(isset($array['foo'])) { ... }
. Em JavaScript, você costuma usar if(array.foo) { ... }
o mesmo, mas essa não é exatamente a mesma declaração. A condição também será avaliada como falsa se array.foo
existir, mas é false
or 0
(e provavelmente outros valores também).
Qual é o equivalente perfeito de PHP isset
em JavaScript?
Em um sentido mais amplo, seria conveniente um guia geral e completo sobre o tratamento de variáveis que não existem no JavaScript, variáveis sem valor etc.
javascript
isset
Bart van Heukelom
fonte
fonte
_.isUndefined(arr.foo)
Respostas:
Eu geralmente uso o
typeof
operador:Ele retornará
"undefined"
se a propriedade não existir ou seu valor forundefined
.(Veja também: Diferença entre
undefined
e não sendo definido. )Existem outras maneiras de descobrir se existe uma propriedade em um objeto, como o
hasOwnProperty
método:E o
in
operador:A diferença entre os dois últimos é que o
hasOwnProperty
método verifica se a propriedade existe fisicamente no objeto (a propriedade não é herdada).O
in
operador verificará todas as propriedades alcançáveis na cadeia de protótipos, por exemplo:Como você pode ver,
hasOwnProperty
retornafalse
e oin
operador retornatrue
ao verificar otoString
método, esse método é definido na cadeia de protótipos, porqueobj
herda o formulárioObject.prototype
.fonte
typeof
vez deif( obj.foo !== undefined )
?isset($abc->def->ghi->jkl)
sem gerar uma exceção e interromper o script, ao contrário dotypeof
operador do JavaScript . Você tem que usar algo comotry{ abc.def.ghi.jkl; isset=true } catch(e){ isset=false }
Segmento antigo, mas há novas maneiras de executar um equivalente
isset()
.ESNext (Etapa 4 de dezembro de 2019)
Duas novas sintaxes nos permitem simplificar amplamente o uso da
isset()
funcionalidade:?.
)??
)Leia os documentos e lembre-se da compatibilidade do navegador.
Resposta Anterior
Veja abaixo a explicação. Nota Eu uso a sintaxe StandardJS
Exemplo de uso
Função de resposta
Explicação
PHP
Observe que no PHP você pode fazer referência a qualquer variável a qualquer profundidade - mesmo tentando acessar um não array, pois um array retornará um simples
true
oufalse
:JS
Em JavaScript, não temos essa liberdade, sempre obteremos um erro se fizermos o mesmo, porque JS está tentando acessar imediatamente o valor de
deeper
antes de podermos envolvê-lo em nossaisset()
função para ...Mais alternativas com falha:
E algumas alternativas de trabalho que podem ser redundantes rapidamente:
Conclusão
Todas as outras respostas - embora a maioria seja viável ...
isset()
por exemplo
isset(some, 'nested.deeper.value')
eval()
que funciona, mas eu pessoalmente evitoEu acho que cobri muito disso. Há alguns pontos que afirmo em minha resposta que não menciono, porque eles - embora relevantes - não fazem parte da pergunta. Se necessário, posso atualizar minha resposta com links para alguns dos aspectos mais técnicos com base na demanda.
Passei muito tempo nisso, espero que ajude as pessoas.
Obrigado pela leitura!
fonte
O phpjs.org é aposentado principalmente a favor do locutus. Aqui está o novo link http://locutus.io/php/var/isset
fonte
isset(abc.def.ghi)
no caso se nãoabc.def
for definido. No entanto, combinando esta solução com a que aceita um nome de variável na forma de uma string, ela será idêntica à versão do PHP.fonte
fonte
Essa solução simples funciona, mas não para verificação profunda de objetos.
fonte
Eu sempre uso essa função genérica para evitar erros em variáveis primitivas, bem como matrizes e objetos.
fonte
Se você estiver usando underscorejs, eu sempre uso
fonte
Esta é uma solução bastante à prova de balas para testar se existe uma variável:
Infelizmente, você não pode simplesmente encapsulá-lo em uma função.
Você pode pensar em fazer algo assim:
No entanto, isso produzirá um erro de referência se a variável
variable
não tiver sido definida, porque você não pode passar uma variável inexistente para uma função:Por outro lado, permite testar se os parâmetros de função são indefinidos:
Embora nenhum valor para
y
seja repassado para a funçãotest
, nossaisset
função funciona perfeitamente nesse contexto, porquey
é conhecida na funçãotest
como umundefined
valor.fonte
!==
já é um booleano.É muito longo para escrever quando usado. Mas não podemos empacotar a
typeof
palavra-chave em uma função, porque um erro será gerado antes que a função seja chamada, assim:Então eu descobri uma maneira:
Ele pode trabalhar tanto com variáveis individuais (variáveis que não existem) quanto com propriedades de objetos (propriedades inexistentes). E apenas 7 caracteres a mais que o PHP
isset
.fonte
Esta solução funcionou para mim.
fonte
isset(var)
comvar
unset:ReferenceError: var is not defined
fonte
isset(someVar)
, ondesomeVar
nunca foi declarado. No entanto, uma vez que você fazeval
, você provavelmente pretende uma corda a ser passada. Mostrar o uso. É o seu uso pretendidoisset('someVar')
? Nesse caso, isso se parece com a resposta anterior - e sua resposta é nova?mais testes:
https://gist.github.com/daylik/24acc318b6abdcdd63b46607513ae073
fonte
Para verificar se o bloco html existe ou não, estou usando este código:
fonte
Forneça o caminho do objeto como uma sequência e, em seguida, você poderá quebrá-la em um caminho e resolvê-lo
hasOwnProperty
a cada etapa enquanto sobrescreve o próprio objeto a cada iteração.Se você estiver codificando no ambiente ES6, dê uma olhada neste Ques do stackoverflow .
fonte
Eu uso uma função que pode verificar variáveis e objetos. muito conveniente trabalhar com jQuery
fonte
Foi realmente um problema para mim quando eu estava acessando uma propriedade mais profunda de um objeto, então criei uma função que retornará o valor da propriedade, se existir, caso contrário, retornará false. Você pode usá-lo para economizar seu tempo,
fonte
Se você deseja verificar se um elemento existe, basta usar o seguinte código:
Esta é uma amostra:
fonte
fonte
O manual do PHP diz:
E interface algo como isto:
bool isset ( mixed $var [, mixed $... ] )
O parâmetro
$var
é a variável a ser verificada. embora possa ter qualquer número de parâmetros.isset () retorna
TRUE
se var existir e tiver um valor diferente deNULL
.FALSE
de outra forma.Algum exemplo:
Como isso em mente, aparentemente, não é possível escrever o equivalente exato da
isset()
função php . Por exemplo, quando chamamos assim:Gatilho Javascript
Uncaught ReferenceError: some_var is not defined at (file_name):line_number
. O importante e notável sobre esse comportamento é que, ao tentar passar variáveis inexistentes para funções normais, um erro é acionado.Mas no PHP
isset()
não são realmente funções regulares, mas construções de linguagem. Isso significa que eles fazem parte da própria linguagem PHP, não cumprem as regras normais de funções e, portanto, podem se safar por não desencadear um erro para variáveis inexistentes. Isso é importante ao tentar descobrir se uma variável existe ou não. Mas em javscript, ele dispara um erro em primeiro lugar, digamos, chamada de função com variáveis inexistentes.Meu argumento é que não podemos escrevê-lo como função javscript equivalente, mas podemos fazer algo assim
Se você quiser exatamente o mesmo efeito, o PHP também verificará que varable não é
NULL
Por exemplo
Então, podemos incorporar isso no javascript, e fica assim:
fonte
isset javascript
fonte
Tenha cuidado no ES6 , todas as soluções anteriores não funcionam se você deseja verificar uma declaração de uma variável let e declara-la, se não estiver
exemplo
você verá um erro
A solução foi alterá-lo por um var
outra solução, se você puder alterar um let por um var, precisará remover seu var
fonte
fonte