Articles

tratamento de erros JavaScript – ReferenceError:” x ” não está definido

a seguir na lista de artigos da nossa série de tratamento de erros JavaScript damos uma olhada mais de perto no erro de variável indefinido. O erro indefinido da variável é jogado quando uma referência a uma variável ou objeto é feita em código que ou não existe, ou está fora do escopo do código de execução.

abaixo vamos dar uma olhada em alguns exemplos específicos que normalmente produzem um erro variável indefinido, bem como como como pegar e lidar com esse erro quando ele aparece. Vamos começar!

a execução técnica

  • todos os objetos de erro JavaScript são descendentes do objeto de erro, ou um objeto herdado nele.
  • o objecto ReferenceError é herdado do objecto de erro.
  • o erro indefinido da variável é um tipo específico de objeto ReferenceError.

quando você deve usá-lo?

quando no fundo do processo de codificação com JavaScript, não é tudo o que nunca se ouviu para fazer um erro tipográfico ou simplesmente esquecer de inicializar uma variável ou objeto antes de chamar a referida variável mais tarde na linha. Quando isso ocorre, JavaScript irá mostrar seu descontentamento, lançando um erro de variável indefinido, indicando que o objeto referenciado não foi previamente definido.

por exemplo, aqui estamos fazendo uma simples declaração de tentar agarrar o .propriedade de comprimento do nosso indefinido itemvariável. Também estamos usando um simples bloco try-catch e agarrando qualquer ReferenceErrors que podem ocorrer e, em seguida, passá-los para um simples printError função de embelezar a saída de nossas mensagens de erro:

var printError = function(error, explicit) { console.log(` ${error.name}: ${error.message}`);}try { // Calling an undefined `item `variable var length = item.length; console.log(`Length is ${length}.`)} catch (e) { if (e instanceof ReferenceError) { printError(e, true); } else { printError(e, false); }}

com Certeza, como esperado, o JavaScript avisos de que o item de variável é indefinido, e produz o explícito Variável Indefinida erro:

// FIREFOX ReferenceError: item is not defined// CHROME ReferenceError: item is not defined

vale a pena notar que, ao contrário de muitos outros erros de JavaScript que cobrimos nesta série, o texto indefinido da mensagem de erro variável não difere entre os dois motores que alimentam o Firefox ou o Chrome.

a correção óbvia e simples para este erro de variável indefinida em particular é simplesmente declarar a nossa variável de item antes de chamá-la:

var printError = function(error, explicit) { console.log(` ${error.name}: ${error.message}`);}try { // Defining `item` first var item = "Bob"; var length = item.length; console.log(`Length is ${length}.`)} catch (e) { if (e instanceof ReferenceError) { printError(e, true); } else { printError(e, false); }}

agora passamos do item.chamada de comprimento sem lançar quaisquer erros e, assim, produzir o nosso console.saída de registo do comprimento do texto do nosso item:

Length is 3.

Tecnicamente, enquanto a Variável Indefinida erro destina-se a identificar referências a variáveis indefinidas, ele também desempenha um papel ao tentar fazer referência a variáveis que estão definidos, mas estão fora do escopo atual contexto, onde o código está sendo executado.

por exemplo, aqui temos uma simples função getFullName, que define duas variáveis dentro de si, o primeiro nome e o último nome. Fora do escopo dessa função, tentamos obter a propriedade de comprimento da variável primeiro nome:

var getFullName = function() { var firstName = "Bob"; var lastName = "Smith"; return `${firstName} ${lastName}`;}var printError = function(error, explicit) { console.log(` ${error.name}: ${error.message}`);}try { // Accessing `firstName` from outside its scope var length = firstName.length; console.log(`Length is ${length}.`)} catch (e) { if (e instanceof ReferenceError) { printError(e, true); } else { printError(e, false); }}

Enquanto o nome da variável é tecnicamente definida já, é inacessível para nós, a este nível de execução, e, portanto, uma Variável Indefinida de erro é lançada:

 ReferenceError: firstName is not defined

neste caso, a resolução é uma questão de puxar o nome e sobrenome variável fora do escopo da getFullNamefunction, então, eles estão dentro do mesmo contexto de execução como o nosso bloco try-catch:

// 4// Declaring the variables outside our functionvar firstName = "Bob";var lastName = "Smith";var getFullName = function() { return `${firstName} ${lastName}`;}var printError = function(error, explicit) { console.log(` ${error.name}: ${error.message}`);}try { // Accessing `firstName` is now allowed var length = firstName.length; console.log(`Length is ${length}.`)} catch (e) { if (e instanceof ReferenceError) { printError(e, true); } else { printError(e, false); }}

Conforme o esperado, sem erros são produzidos, e nós, o comprimento do nome da variável como saída:

Length is 3.

para mergulhar ainda mais fundo na compreensão de como as suas aplicações lidam com erros de JavaScript, verifique a ferramenta revolucionária Airbrake JavaScript de rastreamento de erros para alertas em tempo real e insight instantânea sobre o que correu mal com o seu código JavaScript.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *