Eu queria verificar se a variável está definida ou não. Por exemplo, o seguinte gera um erro não definido
alert( x );
Como posso pegar esse erro?
Eu queria verificar se a variável está definida ou não. Por exemplo, o seguinte gera um erro não definido
alert( x );
Como posso pegar esse erro?
Respostas:
Em JavaScript, null
é um objeto. Há outro valor para coisas que não existem undefined
. O DOM retorna null
para quase todos os casos em que falha em encontrar alguma estrutura no documento, mas no próprio JavaScript undefined
é o valor usado.
Segundo, não, não há um equivalente direto. Se você realmente deseja procurar especificamente por null
:
if (yourvar === null) // Does not execute if yourvar is `undefined`
Se você deseja verificar se existe uma variável, isso só pode ser feito com try
/ catch
, pois typeof
tratará uma variável não declarada e uma variável declarada com o valor undefined
equivalente.
Mas, para verificar se uma variável é declarada e não é undefined
:
if (yourvar !== undefined) // Any scope
Anteriormente, era necessário usar o typeof
operador para verificar indefinidamente com segurança, porque era possível reatribuir undefined
como uma variável. A maneira antiga era assim:
if (typeof yourvar !== 'undefined') // Any scope
O problema de undefined
ser redesignável foi corrigido no ECMAScript 5, lançado em 2009. Agora você pode usar ===
e !==
testar com segurança undefined
sem usar, typeof
como undefined
foi somente leitura por algum tempo.
Se você deseja saber se um membro existe independente, mas não se importa com o seu valor:
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
Se você deseja saber se uma variável é verdadeira :
if (yourvar)
typeof
operador ( typeof null == 'object'
). O null
valor é um valor primitivo , que é o único valor do tipo Nulo .
A única maneira de testar verdadeiramente se uma variável é undefined
é fazer o seguinte. Lembre-se, indefinido é um objeto em JavaScript.
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
Algumas das outras soluções neste encadeamento farão com que você acredite que uma variável não está definida, mesmo que tenha sido definida (com um valor NULL ou 0, por exemplo).
ReferenceError
.
undefined
é um objeto em javascript é desinformação. Esta declaração está relacionada à sua resposta, afinal? É um valor undefined
do tipo undefined
, atribuído ao identificador global nomeado undefined
.
undefined
é somente leitura desde ES5. Você pode testar com segurança para o uso indefinido if (x === undefined) {...}
ou usando abreviada assim: if (x === void 0)
.
Tecnicamente, a solução adequada é (acredito):
typeof x === "undefined"
Às vezes, você pode ficar com preguiça e usar
x == null
mas isso permite que uma variável indefinida x e uma variável x contendo nulo retornem true.
var x;
e, em seguida, typeof x;
você receberá "undefined"
apenas como se você feztypeof lakjdflkdsjflsj;
Uma versão ainda mais fácil e abreviada seria:
if (!x) {
//Undefined
}
OU
if (typeof x !== "undefined") {
//Do something since x is defined.
}
Eu já fiz muitas vezes:
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
Você também pode usar o operador condicional ternário:
var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
//var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
var a = false;
? Você deve verificar se, em a===undefined
vez disso
var x;
fazendo acima irá lançar um erro
!a
testará true para undefined
, mas também testará true para 0
e null
e false
. Isso está muito incorreto e deve ser removido.
Costumo usar a maneira mais simples:
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
EDITAR:
Sem inicializar a variável, a exceção será lançada "Uncaught ReferenceError: a variável não está definida ..."
Uncaught ReferenceError: variable is not defined
variable
é definido por var variable;
. E esse trecho substituirá variable
no escopo local. Ele pode quebrar a lógica que espera acessar um fechamento ou variável global. var variable = 1; function test() { var variable; if (variable === undefined){ console.log('Variable is undefined'); } else { console.log('Variable is defined: ' + variable); } } test(); // Variable is undefined
Outra "solução" em potencial é usar o window
objeto. Evita o problema do erro de referência quando em um navegador.
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
undefined
. Isso não fará isso.
O erro está dizendo que x
isso nem existe! Não foi declarado , o que é diferente de ser atribuído um valor.
var x; // declaration
x = 2; // assignment
Se você declarasse x
, não receberia um erro. Você receberia um alerta que diz undefined
porquex
existe / tenha sido declarado, mas não foi atribuído um valor.
Para verificar se a variável foi declarada, você pode usar typeof
, qualquer outro método para verificar se existe uma variável, gera o mesmo erro que você obteve inicialmente.
if(typeof x !== "undefined") {
alert(x);
}
Isso está verificando o tipo do valor armazenado x
. Ele retornará apenas undefined
quando x
não tiver sido declarado OU se tiver sido declarado e ainda não tiver sido atribuído.
typeof
operador.
O void
operador retorna undefined
para qualquer argumento / expressão passado para ele. para que você possa testar o resultado (na verdade, alguns minifiers alteram seu código de undefined
para void 0
para salvar alguns caracteres)
Por exemplo:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeof
e pensando undefined
pode ser transferido, o que não é possível há cerca de uma década.
undefined
, pois Deus sabe apenas o motivo, o uso void 0
sempre retornará undefined
independentemente.
A resposta aceita está correta. Só queria adicionar mais uma opção. Você também pode usar o try ... catch
bloco para lidar com essa situação. Um exemplo esquisito:
var a;
try {
a = b + 1; // throws ReferenceError if b is not defined
}
catch (e) {
a = 1; // apply some default behavior in case of error
}
finally {
a = a || 0; // normalize the result in any case
}
Esteja ciente do catch
bloco, que é um pouco confuso, pois ele cria um escopo no nível do bloco. E, é claro, o exemplo é extremamente simplificado para responder à pergunta, não abrange as práticas recomendadas no tratamento de erros;).
Uso uma função pequena para verificar se uma variável foi declarada, o que realmente reduz a quantidade de lixo nos meus arquivos javascript. Eu adiciono uma verificação do valor para garantir que a variável não exista apenas, mas também tenha sido atribuído um valor. A segunda condição verifica se a variável também foi instanciada, porque se a variável foi definida, mas não instanciada (veja o exemplo abaixo), ainda gerará um erro se você tentar fazer referência ao valor no seu código.
Não instanciado - var my_variable;
Instanciado -var my_variable = "";
function varExists(el) {
if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) {
return true;
} else {
return false;
}
}
Você pode usar uma instrução condicional para testar se a variável foi definida e instanciada dessa maneira ...
if ( varExists(variable_name) ) { // checks that it DOES exist }
ou para testar se não foi definido e instanciado o uso ...
if( !varExists(variable_name) ) { // checks that it DOESN'T exist }
return typeof el !== "undefined" && typeof el.val() !== "undefined"