Oii, Alan! Tudo bem?
Entendo perfeitamente o que está acontecendo. Essa sensação de o código "travar" é muito comum quando entramos no que chamamos de loop infinito.
O problema tá em um detalhe bem sutil na comparação que você fez dentro do while. Vamos analisar juntos?
O Problema: Tipos de dados
O JavaScript faz distinção entre Texto (String) e Número (Number) dependendo do operador que usamos:
- O comando
prompt sempre retorna um texto (ex: "5"). - A sua variável
numeroSecreto é um número (ex: 5). - Você usou o operador
!== (estritamente diferente).
A lógica do erro:
Quando você digita 5, o prompt entrega "5".
O seu while pergunta: O texto "5" é estritamente diferente do número 5?
A resposta é SIM (porque um é texto e o outro é número). Como a resposta é sim, o loop continua rodando eternamente, mesmo que você acerte o número.
Pra corrigir, basta trocar o operador !== por != (apenas uma igualdade). O operador != é mais "flexível": ele converte o texto para número antes de comparar, permitindo que o loop entenda que "5" é igual a 5 e, portanto, pare a execução.
Código corrigido:
alert('Boas vindas ao jogo do número secreto');
let numeroSecreto = 5;
console.log(numeroSecreto);
let chute;
// Perceba a mudança aqui: de !== para !=
while (chute != numeroSecreto) {
chute = prompt('Escolha um número entre 1 e 10');
// se chute for igual ao número secreto
if (chute == numeroSecreto) {
alert(`Isso ai! Você descobriu o número secreto ${numeroSecreto}`);
} else if (chute > numeroSecreto) {
alert(`O número secreto é menor que ${chute}`);
} else {
alert(`O número secreto é maior que ${chute}`);
}
}
Dica Extra:
No futuro, outra forma de resolver isso é garantir que o chute seja sempre um número, envolvendo o prompt com um parseInt, assim:
chute = parseInt(prompt('Escolha um número entre 1 e 10'));. Mas você verá isso no curso mais pra frente.
Faça essa alteração do sinal.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!