--- title: O que deu errado? Resolvendo problemas no JavaScript slug: Learn/JavaScript/First_steps/What_went_wrong translation_of: Learn/JavaScript/First_steps/What_went_wrong ---
Quando você construiu o jogo "Adivinhe o número" no artigo anterior, você talvez tenha descoberto que ele não funcionou. Não tema — este artigo tem como objetivo impedir que você arranque os cabelos por causa desses problemas, fornecendo-lhe algumas dicas simples de como encontrar e corrigir erros nos programas JavaScript.
Pré-requesitos: |
Conhecimentos básicos de informática, uma compreensão básica de HTML e CSS, uma compreensão do que é JavaScript. |
---|---|
Objetivo: | Ganhar habilidade e confiança para começar a resolver problemas simples em seu próprio código. |
De um modo geral, quando você faz algo errado no código, existem dois tipos principais de erros que você encontrará:
Ok, então não é assim tão simples - há alguns outros diferenciadores à medida que você aprofunda. Mas as classificações acima serão bem úteis nesta fase inicial da sua carreira. Examinaremos esses dois tipos a seguir.
Para começar, voltemos ao nosso jogo de adivinhação - porém desta vez estaremos explorando uma versão que tem alguns erros inseridos propositalmente. Vá até o Github e faça uma cópia local de jogo-numero-erros.html (veja-o em execução aqui).
Nota: Talvez você tenha sua própria versão de exemplo do jogo que não funciona, e pode querer consertá-la! Nós ainda gostaríamos que você trabalhasse no artigo com a nossa versão, para que possa aprender as técnicas que estamos ensinando aqui. Daí então você pode voltar e tentar consertar seu exemplo.
Neste ponto, vamos consultar o console do desenvolvedor para ver se identificamos qualquer erro de sintaxe, e então tentar consertá-lo. Você irá aprender como, logo abaixo.
Anteriormente no curso, nós fizemos você digitar alguns comandos simples de JavaScript no console JavaScript (se você não se lembra como, abra o link anterior). O que é ainda mais útil é o fato do console lhe mostrar mensagens de erro sempre que existir algo errado na sintaxe dentro do JavaScript enviado ao motor de JavaScript do navegador. Agora vamos à caça.
jogo-numero-erros.html
e abra o console JavaScript. Você deverá ver uma mensagem de erro sendo exibida:envioPalpite.addeventListener('click', conferir Palpite);
addEventListener()
.addeventListener
para addEventListener
deverá corrigir esse erro. Faça essa alteração no código do seu arquivo.Nota: Veja nossa página de referência TypeError: "x" is not a function para mais detalhes sobre esse erro.
Null
é um valor especial que significa "nada", ou "sem valor". Então baixoOuAlto
foi declarado e inicializado, mas não com algum valor significativo — não possui nenhum caractere ou valor.conferirPalpite() { ... }
). Como você irá aprender com mais detalhes no nosso artigo de funções mais tarde, o código localizado dentro de funções roda em um escopo separado do código presente fora das funções. Nesse caso, o código não estava rodando e o erro não estava aparecendo até a função conferirPalpite()
ser executada na linha 86.baixoOuAlto.textContent = 'Seu palpite foi muito alto!';
textContent
(conteúdo de texto) da variável baixoOuAlto
como uma sequência de texto, mas isso não está funcionando porque baixoOuAlto
não contém o que deveria conter. Vamos ver o porquê — tente localizar outras instâncias de baixoOuAlto
no código. A instância que aparece primeiro no código JavaScript é na linha 48:
var baixoOuAlto = document.querySelector('baixoOuAlto');
null
(nulo) depois que essa linha é executada. Adicione o seguinte código na linha 49:
console.log(baixoOuAlto);
Nota: console.log()
é uma função de debugging (correção de erros) realmente útil que exibe um valor na tela do console. Então ela irá imprimir o valor da variável baixoOuAlto
na tela do console assim que tentarmos defini-la na linha 48.
console.log()
na tela do seu console.baixoOuAlto
e null
, então definitivamente há um problema com a linha 48.document.querySelector()
para pegar a referência do elemento selecionado com um seletor CSS selector (CSS selector). Olhando mais acima no nosso código, podemos encontrar o parágrafo em questão:
<p class="baixoOuAlto"></p>
querySelector()
na linha 48 não tem o ponto. Esse pode ser o problema! Tente mudar baixoOuAlto
para .baixoOuAlto
na linha 48.console.log()
deverá retornar o elemento <p>
que queremos. Ufa! Outro erro resolvido! Você pode deletar a linha do seu console.log()
agora, ou mantê-la para referência posterior — a escolha é sua.Nota: Veja nossa página de referência TypeError: "x" is (not) "y" para mais detalhes sobre esse erro.
addeventListener
para addEventListener
. Faça isso.Nesse ponto, o jogo deve rodar normalmente, porém depois de jogá-lo algumas vezes você irá notar que o número "aleatório" que você tem que adivinhar é sempre igual a 1. Definitivamente não é como queremos que o jogo funcione!
Há sem dúvida um problema na lógica do jogo em algum lugar — o jogo não está retornando nenhum erro;simplesmente não está funcionando corretamente.
numeroAleatorio
, e as linhas onde o número aleatório é definido primeiro. A instância que armazena o número aleatório que queremos adivinhar no começo do jogo deve estar na linha 44 ou próximo a ela:
var numeroAleatorio = Math.floor(Math.random()) + 1;
numeroAleatorio = Math.floor(Math.random()) + 1;
console.log()
de novo — insira a seguinte linha diretamente abaixo de cada uma das duas linhas:
console.log(numeroAleatorio);
numeroAleatorio
é igual a 1 cada vez em que é exibido no console.Para consertar isso, vamos considerar como essa linha está trabalhando. Primeiro, nós invocamos Math.random()
, que gera um número decimal aleatório entre 0 e 1, ex. 0.5675493843.
Math.random()
Em seguida, passamos o resultado invocando Math.random()
através de Math.floor()
, que arredonda o número passado para o menor número inteiro mais próximo. E então adicionamos 1 ao resultado:
Math.floor(Math.random()) + 1
Arredondando um número decimal aleatório entre 0 e 1 para baixo irá sempre retornar 0, então adicionando 1 a ele sempre retornará 1. Precisamos multiplicar o número aleatório por 100 antes de o arredondarmos para baixo. O código seguinte nos daria um número aleatório entre 0 and 99:
Math.floor(Math.random()*100);
Por isso, queremos adicionar 1, para nos dar um número aleatório entre 1 e 100:
Math.floor(Math.random()*100) + 1;
Tente atualizar as duas linhas dessa forma, então salve e atualize o navegador — o jogo deve agora funcionar como nós queremos que funcione!
Existem outros erros comuns com os quais você irá esbarrar em seu código. Essa seção destaca a maioria deles.
Erro de sintaxe: faltando ";" antes da declaração. Esse erro geralmente significa que você deixou de inserir um ponto e vírgula ao final de uma de suas linhas de código, mas algumas vezes pode ser mais crítico. Por exemplo, se mudarmos essa linha (número 58) dentro da função conferirPalpite()
:
var palpiteUsuario = Number(campoPalpite.value);
para
var palpiteUsuario === Number(campoPalpite.value);
Exibe esse erro porque pensa que você está fazendo algo diferente. Você deve se certificar de não misturar o operador de atribuição (=
) — que configura uma variável para ser igual a determinado valor — com o operador de igualdade restrita (===
), que testa se um valor é exatamente igual a outro, e retorna um resultado true
/false
(verdadeiro ou falso).
Nota: Veja nossa página de referência SyntaxError: missing ; before statement para mais detalhes sobre esse erro.
Isso pode ser outro sintoma de confusão entre o operador de atribuição e o operador de igualdade restrita. Por exemplo, se nós quiséssemos essa linha dentro de conferirPalpite()
:
if (palpiteUsuario === numeroAleatorio) {
para
if (palpiteUsuario = numeroAleatorio) {
o teste retornaria sempre true
(verdadeiro), causando o programa a reportar que o jogo foi vencido. Tome cuidado!
Erro de sintaxe: faltando ")" depois de listar uma declaração. Esse é bem simples — geralmente significa que deixamos de fechar o parênteses no final ao invocar uma função/método.
Nota: Veja nossa página de referência SyntaxError: missing ) after argument list para mais detalhes sobre o erro.
Erro de sintaxe: faltando ":" depois da propriedade id. Esse erro geralmente se relaciona à formação incorreta de um objeto de JavaScript, mas nesse caso o obtivemos alterando:
function conferirPalpite() {
para
function conferirPalpite( {
Isso levou o navegador a pensar que estávamos tentando passar todo o conteúdo da função como se fosse um argumento dessa função. Seja cuidadoso com esses parênteses!
Erro de sintaxe: faltando "}" depois do corpo da função. Isso é fácil — geralmente significa que você deixou de colocar uma das chaves de uma função ou de uma estrutura condicional. Nós obtemos esse erro deletando uma das chaves de fechamento próximas ao final da função conferirPalpite()
.
Erro de sintaxe: esperado uma expressão, obtido uma 'string' e Erro de sintaxe: string literal não terminada. Esses erros geralmente significam que você deixou de colocar aspas no início ou no final da declaração de uma cadeia de texto. No primeiro erro acima, 'string' seria substituído pelo(s) caractere(s) encontrado(s) pelo navegador ao invés da aspa no início de uma cadeia de texto. O segundo erro quer dizer que a cadeia de texto não foi finalizada com o caractere de aspa.
Para todos esses erros, pense em como nós abordamos os exemplos em que olhamos no passo a passo. Quando um erro surge, olha o número da linha que é informado, vá até essa linha e veja se consegue localizar o que há de errado. Mantenha em mente que o erro não estará necessariamente nessa linha, e também que o erro pode não ter sido causado exatamente pelo mesmo problema que citamos acima!
Nota: Veja nossas páginas de referência SyntaxError: Unexpected token e SyntaxError: unterminated string literal para mais detalhes sobre esses erros.
Então aqui temos, o básico de como resolver erros em programas simples de JavaScript. Não será sempre tão fácil de solucionar o que está errado em seu código, mas pelo menos isso irá te poupar algumas horas de sono e lhe permitir progredir um pouco mais rápido quando as coisas não saírem certas no início da sua jornada de aprendizado.
{{PreviousMenuNext("Learn/JavaScript/First_steps/A_first_splash", "Learn/JavaScript/First_steps/Variables", "Learn/JavaScript/First_steps")}}