O JavaScript verifica se existe uma variável (definida / inicializada)

Qual método de verificar a inicialização de uma variável é melhor / correto? (Assumindo que uma variável pode conter qualquer coisa (string, int, objeto, função, etc.))

 if (elem) { // or !elem 

ou

 if (typeof(elem) !== 'undefined') { 

ou

 if (elem != null) { 
1312
25 февр. definido por Samuel Liew 25 de fevereiro 2011-02-25 06:44 '11 at 6:44 2011-02-25 06:44
@ 29 respostas

O operador typeof verifica se a variável é indefinida.

 if (typeof variable === 'undefined') { // variable is undefined } 

O operador typeof , ao contrário de outros operadores, não lança uma exceção ReferenceError quando usado com uma variável não declarada.

No entanto, observe que typeof null retorna "object" . Devemos ter cuidado para evitar um erro de inicialização da variável antes de null . Para ser seguro, isso é o que poderíamos usar em vez disso:

 if (typeof variable === 'undefined' || variable === null) { // variable is undefined or null } 

Para obter mais informações sobre como usar comparações estritas === vez de igualdade simples == consulte: Qual operador é igual (== vs ===) deve ser usado na comparação de JavaScript?

704
28 июня '11 в 19:00 2011-06-28 19:00 a resposta é dada por Samuel Liew em 28 de junho '11 às 19:00 2011-06-28 19:00

Você quer o operador typeof . Em particular:

border=0
 if (typeof variable !== 'undefined') { // the variable is defined } 
2538
06 февр. A resposta é dada por Jim Puls 06 fev. 2009-02-06 07:56 '09 às 7:56 am 2009-02-06 07:56

Em JavaScript, uma variável pode ser definida, mas mantenha o valor undefined , portanto, a resposta mais comum não é tecnicamente correta e, em vez disso, executa o seguinte:

 if (typeof v === "undefined") { // no variable "v" is defined in the current scope // *or* some variable v exists and has been assigned the value undefined } else { // some variable (global or local) "v" is defined in the current scope // *and* it contains a value other than undefined } 

Isso pode ser suficiente para seus propósitos. O teste a seguir tem semântica mais simples, o que facilita descrever com precisão o comportamento de seu código e a você mesmo para entendê-lo (se estiver preocupado com isso):

 if ("v" in window) { // global variable v is defined } else { // global variable v is not defined } 

Isso, obviamente, pressupõe que você esteja trabalhando em um navegador (onde window é o nome de um objeto global). Mas se você se mexer com esses globals, você provavelmente está em um navegador. Subjetivamente, o uso de 'name' in window estilisticamente consistente com o uso de window.name para se referir a variáveis ​​globais. Acessar variáveis ​​globais como propriedades de window , em vez de variáveis, minimiza o número de variáveis ​​não declaradas a que você se refere em seu código (no interesse da listagem) e evita a possibilidade de que seu objeto global seja obscurecido por uma variável local. Além disso, se os globais fizerem sua pele escanear, você poderá se sentir mais confortável em tocá-los apenas com este bastão relativamente longo.

182
22 окт. A resposta é dada por Brian Kelley em 22 de outubro. 2012-10-22 18:47 '12 em 6:47 pm 2012-10-22 18:47

Na maioria dos casos, você usará:

 elem != null 

Ao contrário do simples if (elem) , ele permite 0 , false , NaN e '' , mas rejeita null ou undefined , o que o torna um bom teste geral para a presença de um argumento ou uma propriedade de um objeto.


Outras verificações também não estão incorretas, elas apenas têm aplicativos diferentes:

  • if (elem) : pode ser usado se elem garantido como sendo um objeto, ou se false , 0 , etc. considerados como valores padrão (portanto, equivalentes a undefined ou null ).

  • typeof elem == 'undefined' pode ser usado nos casos em que o valor null especificado possui um valor claro para uma variável ou propriedade não inicializada.

    • Esta é a única verificação que não causará um erro se o elem não elem declarado. (isto é, a instrução var , não a window > property ou um argumento de função). Isso, na minha opinião, é bastante perigoso, pois permite que erros de digitação passem despercebidos. Para evitar isso, consulte o método abaixo.

Uma comparação estrita com undefined também undefined útil:

 if (elem === undefined) ... 

No entanto, como o undefined global pode ser substituído por outro valor, é melhor declarar a variável undefined no escopo atual antes de usá-lo:

 var undefined; // really undefined if (elem === undefined) ... 

Ou:

 (function (undefined) { if (elem === undefined) ... })(); 

A segunda vantagem deste método é que os minificadores JS podem reduzir a variável undefined para um caractere, cada vez salvando vários bytes.

112
25 февр. A resposta é dada por David Tang 25 de fevereiro 2011-02-25 06:48 '11 às 6:48 2011-02-25 06:48

Em muitos casos, use:

 if (elem) { // or !elem 

faça o trabalho para você! ... verificará os seguintes casos:

  1. undefined : se o valor é indefinido e é undefined
  2. null : se for null, por exemplo, se o elemento DOM não existir ...
  3. linha em branco : ''
  4. 0 : número zero
  5. NaN : não é um número
  6. falso

Assim, cobrirá todos os casos, mas sempre há casos estranhos que gostaríamos de tocar também, por exemplo, uma string com espaços, como ' ' one”, será definida em javascript, pois possui espaços dentro da string ... por exemplo, neste caso, você adiciona outra verificação com trim (), por exemplo:

 if(elem) { if(typeof elem === 'string'  elem.trim()) { /// 

Além disso, essas verificações são apenas para valores , pois objetos e matrizes funcionam de maneira diferente em Javascript, a matriz vazia [] e o objeto vazio {} sempre corretos .

Eu crio uma imagem abaixo para mostrar rapidamente a resposta:

2019

01 сент. A resposta é dada Alireza 01 set. 2017-09-01 09:15 '17 às 9:15 pm 2017-09-01 09:15

Como verificar se existe uma variável

Esta é uma solução bastante à prova de balas para testar se a variável existe e foi inicializada:

 var setOrNot = typeof variable !== typeof undefined; 

É mais freqüentemente usado em combinação com o operador ternário para definir um valor padrão no caso de alguma variável não ter sido inicializada:

 var dark = typeof darkColor !== typeof undefined ? darkColor : "black"; 

Problemas de encapsulamento

Infelizmente, você não pode simplesmente encapsular seu cheque em uma função.

Você pode pensar em fazer algo assim:

 function isset(variable) { return typeof variable !== typeof undefined; } 

No entanto, isso produzirá um erro de referência se você ligar, por exemplo. isset(foo) e a variável foo não foo definidos porque você não pode passar uma variável inexistente para uma função:

Não preparado ReferenceError: foo não definido


Testando parâmetros de função indefinidos

Embora nossa função isset não possa ser usada para verificar a presença ou ausência de uma variável (pelos motivos descritos acima), ela nos permite verificar se os parâmetros da função são indefinidos:

 var a = '5'; var test = function(x, y) { console.log(isset(x)); console.log(isset(y)); }; test(a); // OUTPUT : // ------------ // TRUE // FALSE 

Mesmo que o valor de y não seja passado pela função de test , nossa função isset funciona bem neste contexto, desde que y conhecido na função de test como o valor undefined .

59
19 февр. Resposta dada por John Slegers em 19 Fev 2016-02-19 14:54 '16 às 2:54 pm 2016-02-19 14:54

Verifique se o objeto hasOwnProperty()

Uma alternativa para o hasOwnProperty() respostas typeof é usar hasOwnProperty() , que, claro, verifica se um objeto (quase tudo em JS) tem uma propriedade, ou seja, uma variável (a propósito).

O método hasOwnProperty() retorna um valor booleano indicando se o objeto tem a propriedade especificada como sua propriedade (não herdável).

Cada objeto descendente do objeto herda o método hasOwnProperty() . Esse método pode ser usado para determinar se um objeto tem uma propriedade especificada como uma propriedade direta desse objeto; Ao contrário do operador in, esse método não verifica a cadeia de protótipos de objetos.

43
02 мая '15 в 17:07 2015-05-02 17:07 Resposta dada por Fred Gandt em 02 de maio de 2015 às 17:07 2015-05-02 17:07

Há outra maneira de verificar isso quando você executa tarefas simples e verificações relacionadas. Basta usar o operador condicional (triplo).

 var values = typeof variable !== 'undefined' ? variable : ''; 

Também será útil quando você tentar declarar uma variável global com a atribuição de uma instância a uma variável de referência.

Se você quiser verificar uma variável, ela não deve ser undefined ou null . Em seguida, execute o checkout abaixo.

Quando uma variável é declarada, e se você quiser verificar o valor, é até simples: e executará verificações undefined e null juntas.

 var values = variable ? variable : ''; 
39
19 февр. A resposta é dada por RajeshKdev em 19 de fevereiro. 2016-02-19 08:26 '16 em 8:26 am 2016-02-19 08:26

indefinido, booleano, string, número, função

 if (tipo de foo! == 'indefinido') {  } 

Objeto, matriz

 if( foo instanceof Array ) { } 
27
26 июля '13 в 5:08 2013-07-26 05:08 a resposta é dada por Yuan Zhaohao 26 de julho de 2013 às 5:08 am 2013-07-26 05:08

Depende se você só precisa de uma variável para ser definida ou se você quer que ela tenha um valor.

Verificar se o tipo é indefinido irá verificar se a variável ainda está definida.

=== null ou !== null irá verificar se o valor de uma variável é de fato null .

== null ou != null irá verificar se o valor é undefined ou null .

if(value) verifica se a variável é undefined , null , 0 ou uma cadeia vazia.

25
25 февр. A resposta é dada por Alan Geleynse 25 de fevereiro 2011-02-25 06:46 '11 às 6:46 2011-02-25 06:46

A resposta mais correta está correta, use typeof.

No entanto, gostaria de salientar que em JavaScript undefined é mutável (por algum motivo profano). Portanto, simplesmente verificar varName !== undefined pode nem sempre retornar como esperado, porque outras bibliotecas podem ser alteradas indefinidamente. Várias respostas (@ skalee's, por exemplo) parecem preferir não usar typeof , e isso pode causar problemas.

A maneira “antiga” de lidar com isso era declarar indefinido como um var para compensar qualquer possível desligamento / comutação de undefined . No entanto, a melhor maneira de continuar usando o typeof é porque ele ignorará qualquer substituição de código undefined de outro código. Especialmente se você está escrevendo código para uso na natureza, onde alguém sabe o que mais pode funcionar na página ...

11
22 февр. a resposta é dada pela tempestade de sombras 22 de fevereiro 2013-02-22 21:23 '13 às 21:23 2013-02-22 21:23
 if (typeof console != "undefined") { ... } 

Ou melhor

 if ((typeof console == "object")  (typeof console.profile == "function")) { console.profile(f.constructor); } 

Funciona em todos os navegadores

10
03 янв. a resposta é dada boslior 03 jan. 2013-01-03 11:08 '13 às 11:08 2013-01-03 11:08

Para contribuir com a discussão, se eu souber que uma variável deve ser uma string ou um objeto, eu sempre prefiro if (!variable) , então eu verifico se é false. Isso pode levar a um código mais limpo, por exemplo:

8
28 янв. a resposta é dada de3 28 jan. 2016-01-28 14:11 '16 às 2:11 PM 2016-01-28 14:11

É difícil distinguir entre indefinido e nulo. Nulo é o valor que você pode atribuir a uma variável se quiser indicar que a variável não possui um valor específico. Indefinido é um valor especial que será o valor padrão para variáveis ​​não atribuídas.

 var _undefined; var _null = null; alert(_undefined); alert(_null); alert(_undefined == _null); alert(_undefined === _null);var _undefined; var _null = null; alert(_undefined); alert(_null); alert(_undefined == _null); alert(_undefined === _null); 
7
25 февр. a resposta é dada por Jith 25 de fevereiro 2011-02-25 07:08 '11 às 7:08 2011-02-25 07:08

Essas respostas (exceto a decisão de Fred Gandt) estão incorretas ou incompletas.

Suponha que eu precise de um variableName; passar o valor undefined e, portanto, foi declarado no caminho var variableName; o que significa que já está inicializado ; - Como verificar se é anunciado mais cedo?

Ou melhor ainda - como posso verificar imediatamente se existe uma "Book1.chapter22.paragraph37" com uma chamada, mas não causa um erro de referência?

Fazemos isso com o mais poderoso operador do JasvaScript:

 "[variable||property]" in [context||root] >> true||false 

No momento da popularidade do AJAX, eu escrevi um método (mais tarde chamado) isNS (), que é capaz de determinar se existe um namespace, incluindo testes profundos para nomes de propriedades, como "Book1.chapter22.paragraph37" e mais.

Mas desde que foi publicado anteriormente e por causa de sua grande importância, ele merece ser publicado em um tópico separado, eu não o publicarei aqui, mas forneça palavras-chave ( javascript + isNS ), que irão ajudá-lo a encontrar o código fonte suportado por todas as explicações necessárias.

7
27 дек. A resposta é dada por Bekim Bacaj 27 dez. 2016-12-27 05:55 '17 às 5:55 2016-12-27 05:55

Nulo é um valor em javascript e typeof null retornos typeof null "object"

Portanto, a resposta recebida não funcionará se você passar valores nulos. Se você passar valores nulos, precisará adicionar uma verificação extra para valores nulos:

 if ((typeof variable !== "undefined")  (variable !== null)) { // the variable is defined and not null } 
7
21 сент. A resposta é dada por Razan Paul 21 set . 2015-09-21 08:20 '15 às 8:20 am 2015-09-21 08:20

O mais confiável "está definido" é verificado usando typeof

 if (typeof elem === 'undefined') 

Se você está simplesmente verificando uma variável específica para atribuir um valor padrão, muitas vezes você pode fazer isso por um único liner legível:

 elem = elem || defaultElem; 

Geralmente é útil usar: A maneira idiomática de definir valores padrão em javascript.

Há também este forro usando a palavra-chave typeof :

 elem = (typeof elem === 'undefined') ? defaultElem : elem; 
6
30 сент. a resposta é dada Zv_oDD 30 set . 2014-09-30 15:35 '14 às 15:35 2014-09-30 15:35

Você pode usar o operador typeof .

Por exemplo

 var dataSet; alert("Variable dataSet is : " + typeof dataSet); 

O trecho de código acima retornará a saída, por exemplo

dataSet variável: indefinido.

6
25 апр. Resposta dada por Ravindra Miyani em 25 abr. 2014-04-25 08:20 '14 às 8:20 2014-04-25 08:20

Minha preferência é typeof(elem) != 'undefined' elem != null .

No entanto, você escolhe, considere colocar o cheque em tal função

 function existy (x) { return typeof (x) != 'undefined'  x != null; } 

Se você não sabe que a variável está declarada, continue com typeof (x) != 'undefined' x != null;

Se você sabe que uma variável é declarada, mas pode não existir, você pode usar

 existy(elem)  doSomething(elem); 

A variável que você verifica às vezes pode ser uma propriedade anexada. Você pode usar prop || {} para percorrer a linha verificando a existência da propriedade relevante:

 var exists = ((((existy(myObj).prop1||{}).prop2||{}).prop3||{})[1]||{}).prop4; 

Após cada uso da propriedade (... '|| {}'). nextProp para que a propriedade ausente não forneça um erro.

Ou você pode usar como existy(o) existy(op) existy(opq) doSomething(opq)

5
13 дек. resposta dada curtwphillips 13 de dez 2015-12-13 10:39 '15 às 10:39 2015-12-13 10:39

Se você quiser que um bloco específico faça alguma coisa, use

 if (typeof variable !== 'undefined') { // the variable is defined } 

Se você quiser que o bloco indefinido execute algo ou atribua ou defina uma variável, use este

 if (typeof variable === 'undefined') { // the variable is undefined } 
5
11 окт. a resposta é dada por Vinayak Shedgeri 11 de outubro . 2017-10-11 15:06 '17 às 15:06 2017-10-11 15:06

Na situação específica descrita na pergunta,

 typeof window.console === "undefined" 

partidas com

 window.console === undefined 

Eu prefiro o último, como é mais curto.

Observe que olhamos para o console apenas no escopo global (que é o objeto da window em todos os navegadores). Nesta situação particular, isso é desejável. Nós não queremos console definido em outro lugar.

@BrianKelley, em sua grande resposta, explica os detalhes técnicos. Acabei de adicionar a falta de saída e digeri para algo mais fácil de ler.

5
17 февр. A resposta é dada skalee 17 fev. 2013-02-17 06:31 '13 às 6:31 am 2013-02-17 06:31

Eu uso dois métodos diferentes, dependendo do objeto.

 if( !variable ){ // variable is either // 1. ''; // 2. 0; // 3. undefined; // 4. null; // 5. false; } 

Às vezes eu não quero avaliar a string vazia como falsa, então eu uso este caso

 function invalid( item ){ return (item === undefined || item === null); } if( invalid( variable )){ // only here if null or undefined; } 

Se você precisar do oposto, então na primeira cópia! A variável se torna uma variável !! e, em uma função inválida, torna-se ===! = E os nomes das funções mudam para notInvalid.

4
03 июля '15 в 22:45 2015-07-03 22:45 a resposta é dada por SoEzPz em 03 de julho '15 às 10:45 pm 2015-07-03 22:45

Um pouco mais funcional e fácil de usar:

 function exist(obj) { return (typeof obj !== 'undefined'); } 

A função retorna true se existir, senão false se não existir.

3
11 сент. A resposta é dada em 11 de setembro . 2015-09-11 12:51 '15 às 12:51 2015-09-11 12:51

Depende da situação. Se você estiver testando algo que pode ou não ser globalmente definido fora do seu código (por exemplo, jQuery), você deseja:

 if (typeof(jQuery) != "undefined") 

(Não há necessidade de igualdade estrita, typeof sempre retorna uma string.) Mas se você tiver argumentos para uma função que pode ou não ser passada, eles sempre serão definidos, mas null se forem omitidos.

 function sayHello(name) { if (name) return "Hello, " + name; else return "Hello unknown person"; } sayHello(); // => "Hello unknown person" 
3
25 февр. Resposta dada por jpsimons 25 de fev 2011-02-25 07:15 '11 at 7:15 am 2011-02-25 07:15

Que tal simples:

 if(!!variable){ //the variable is defined } 
2
26 июня '15 в 16:13 2015-06-26 16:13 Resposta é dada por JasoonS em 26 de junho '15 às 16:13 2015-06-26 16:13

Lembre-se disso quando você verificar! == ou! = Contra "indefinido", não vai funcionar

Testado no Firfox Quantum 60.0.1

use um teste como este para evitar conflitos

 if(!(typeof varibl['fl'] === 'undefined')) { console.log(varibl['fl']); console.log("Variable is Defined"); }else{ console.log(varibl['fl']); console.log("Variable is Un-Defined"); } 
0
31 мая '18 в 10:32 2018-05-31 10:32 a resposta é dada por Aylian Craspa em 31 de maio '18 às 10:32 2018-05-31 10:32

Para verificar se uma variável é declarada / definida, fiz este truque sujo.

Eu não encontrei uma maneira de extrair código em uma função, mesmo com eval .

 "use strict"; // var someVar; var declared; try { someVar; declared = true; } catch(e) { declared = false; } if (declared) { console.log("someVar is declared; now has the value: " + someVar); } else { console.log("someVar is not declared"); } 
-1
05 апр. a resposta é dada Ferran Maylinch 05 de abril 2016-04-05 20:04 '16 às 8:04 pm 2016-04-05 20:04

Não tenho certeza se iria ajudar, eu tinha que verificar se Var, que foi definido na página, foi selecionado antes de iniciar os scripts associados, e para mim funcionou bem.

 if (window.myvar) { // run scripts here } 

É um pouco simples, mas ótimo para um deles ou similar.

-3
16 нояб. A resposta é dada por Jordan Smith em 16 de novembro. 2017-11-16 19:23 '17 às 19:23, 2017-11-16 19:23

Eu não vejo isso nas respostas acima, então eu ofereço aqui, eu acho.

 function isDefined(x) { return !!x } if( isDefined(x) ) { //The variable is defined } 

! x irá retornar true iff x seja nulo ou indefinido , então !! x retorna verdadeiro se x não é nem indefinido nem nulo.

Eu entendo que isso também explica o caso zero, mas aqui está um aviso justo sobre isso.

-4
26 авг. A resposta é dada TauOmicronMu 26 ago. 2016-08-26 18:44 '16 às 18:44 2016-08-26 18:44