Ops, fiz de novo: depurando erros comuns de JavaScript



Às vezes, escrever código JavaScript é difícil e às vezes é assustador, o que é familiar para muitos desenvolvedores. No processo, inevitavelmente surgem erros, e alguns deles são frequentemente repetidos. O artigo, desenvolvido para desenvolvedores iniciantes, fala sobre esses erros e como resolvê-los. Para maior clareza, os nomes das funções, propriedades e objetos são retirados de uma música popular . Tudo isso ajuda a lembrar rapidamente de como corrigir erros comuns.

Lembramos que: para todos os leitores de "Habr" - um desconto de 10.000 rublos ao se inscrever em qualquer curso Skillbox usando o código promocional "Habr".

A Skillbox recomenda: Curso prático "Mobile Developer PRO" .

TypeError: propriedade não definida


let girl = { name: "Lucky", location: "Hollywood", profession: "star", thingsMissingInHerLife: true, lovely: true, cry: function() { return "cry, cry, cries in her lonely heart" } } console.log(girl.named.lucky) 

O código de exemplo acima gera um TypeError não capturado: Não é possível ler a propriedade 'lucky' de erro indefinido. O problema é que o objeto de menina não possui uma propriedade nomeada, embora exista uma propriedade de nome. E como a propriedade girl.named não está definida, é impossível acessá-la, porque formalmente não existe. Mas se você substituir girl.named.lucky por girl.name, tudo funcionará e o programa retornará Lucky.

Leia mais sobre as propriedades aqui .

Métodos para corrigir erros de TypeError


Erros TypeError ocorrem quando um programador tenta executar ações em dados que não correspondem a um tipo específico. Como exemplo, use .bold (), solicite uma propriedade indefinida ou chame uma função que não é realmente uma função.

Portanto, se você tentar chamar girl (), um erro de TypeError não capturado será exibido: yourVariable.bold não é uma função e girl não é uma função, porque, na verdade, o objeto é chamado, não a função.

Para eliminar erros, você precisa estudar as variáveis. Então, o que é garota? E o que é girl.named? Você pode descobrir se analisa o código, exibe as variáveis ​​usando console.log com o comando debugger ou chamando o nome da variável no console. Você precisa garantir que seja possível operar com o tipo de dados que está contido na variável. Se não se encaixar, altere-o, por exemplo, adicione uma condição ou tente ... bloquear bloco e obtenha controle sobre a operação.

Estouro de pilha


Se você acredita que os autores das palavras da música Baby One More Time (Britney Spears, hein), a palavra hit nesse contexto significa o desejo do cantor de ser chamado novamente (aqui está uma explicação do contexto da música, aproximadamente tradutor). Pode ser que esse desejo leve a um aumento no número de chamadas na vida real. Mas na programação, essa é uma recursão que pode causar um erro se a pilha de chamadas estourar.

Os erros são os seguintes:

Erro: espaço fora da pilha (borda)
InternalError: muita recursão (Firefox)
RangeError: tamanho máximo da pilha de chamadas excedido (Chrome)

O estouro de pilha ocorre se o desenvolvedor não levar em consideração o caso base em recursão ou se o código não abordar o caso fornecido.

 function oneMoreTime(stillBelieve=true, loneliness=0) { if (!stillBelieve && loneliness < 0) return loneliness++ return oneMoreTime(stillBelieve, loneliness) } 

Nesse caso, stillBelieve nunca pode ser definido como false; portanto, oneMoreTime será chamado toda vez, mas a função nunca terminará.

Se você começar a esperar dois amigos, isso reduzirá a solidão (solidão) e você não poderá esperar pela ligação.

 function oneMoreTime(stillBelieve=true, loneliness=0) { if (!stillBelieve && loneliness < 0) return loneliness-- stillBelieve = false return oneMoreTime(stillBelieve, loneliness) } 

Como exemplo, existem casos com loops infinitos, quando o sistema não envia uma mensagem de erro e a página na qual o código JavaScript é executado simplesmente congela. Isso acontece se o loop while não tiver uma condição de finalização.

 let worldEnded = false while (worldEnded !== true) { console.log("Keep on dancin' till the world ends") } 

Você pode resolver o problema da seguinte maneira:

 let worldEnded = false while (worldEnded !== true) { console.log("Keep on dancin' till the world ends") worldEnded = true } 

Depurar loops e recursões sem fim


Se você tiver um problema com um loop infinito, no Chrome ou Edge, feche a guia e, no Firefox, feche a janela do navegador. Depois disso, você precisa analisar cuidadosamente o código. Se você não conseguir encontrar o problema, adicione o comando debugger ao loop ou função e verifique o valor das variáveis. Se o resultado não for o esperado, substitua-o, isso pode ser feito facilmente.

No exemplo acima, o depurador deve ser adicionado como a primeira linha de uma função ou loop. Em seguida, você precisa abrir a guia de depuração no Chrome analisando as variáveis ​​no escopo. Usando o botão seguinte, você pode acompanhar as alterações em cada iteração. Fazer tudo isso é simples e, na maioria dos casos, o problema é.

Você pode ler mais sobre tudo isso aqui ( para Chrome ) e aqui ( para Firefox ).

Erro de sintaxe


Um dos erros de JavaScript mais comuns é o SyntaxError. Evite que eles ajudem o editor de texto de extensão. Portanto, o Bracket Pair Colorizer marca os colchetes no código em cores diferentes, e o Prettier ou uma ferramenta de análise semelhante possibilita encontrar rapidamente erros. A melhor opção para reduzir a probabilidade de SyntaxError é o aninhamento mínimo.

Compartilhe nos comentários: o que você faz para evitar erros ou detectar e eliminá-los rapidamente?

A Skillbox recomenda:

Source: https://habr.com/ru/post/pt450194/


All Articles