Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

não precisa usar parseInt?

nesse código:

let numeroMaximo = prompt("Digite um número para a contagem regressiva:");

while (numeroMaximo >= 0) {
    console.log(numeroMaximo);
    numeroMaximo--;
}

não teria que ter um parseInt antes do prompt? Não entendi como funciona... o sistema não deveria interpretar o número como um texto se não houver o parseInt? Havia visto isso em outra aula, se alguém puder explicar, agradeço.

4 respostas

Oi Júlio! Como vai?

Você está certo em sua observação. Quando usamos prompt() para capturar um valor inserido pelo usuário, o que recebemos é uma string (texto). Para realizar operações numéricas, como a comparação no while ou a subtração com numeroMaximo--, é necessário converter essa string em um número.

Porém, em JavaScript o operador "==" compara apenas o conteúdo, mesmo o valor sendo numérico ou não, seja esse valor igual ao outro o resultado da condição será TRUE.

Então o resultado em questão não está errado, mas sim, não é uma boa prática implementar assim.

Espero ter esclarecido e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Oi, Armano. Obrigado pela resposta. Se entendi direito, então quer dizer que no JS, se eu tenho o operador =>, <= ou == ou as variações disso, ele vai comparar não importa se um é número e o outro é texto, é isso? Ok... eu fiquei com a dúvida, gostaria de saber se quando eu entrego uma string pro sistema, se ele vai converter em numeral (se usar o prompt) sozinho ou não (pelo comentário, entendi que não)? Então por exemplo, se eu colocar o valor 5 quando aparece o prompt, o sistema interpreta isso como texto? Ou por apenas ser um algorismo ele converte sozinho para numeral? Porque se ele não converte sozinho, como ele ia fazer a decrementação? Na minha cabeça, se eu der um algorismo como texto, e depois decrementar, o resultado da variável ficaria assim: numeroMaximo = ''5'' >> (decrementa) >> numeroMaximo = ''5'' - 1 >> (decrementa) >> numeroMaximo = ''5'' - 2 >> etc... Se este for o caso, como que o while irá comparar os conteúdos do numeral e do texto?

solução!

Oi, Júlio!

Sim, quando você usa prompt, o valor retornado é sempre uma string. O JavaScript faz uma conversão implícita quando você usa esse valor em uma operação que espera um número. No seu código:

let numeroMaximo = prompt("Digite um número para a contagem regressiva:");

while (numeroMaximo >= 0) {
    console.log(numeroMaximo);
    numeroMaximo--;
}

A comparação numeroMaximo >= 0 e a decrementação numeroMaximo-- forçam o JavaScript a converter automaticamente a string em número. Isso funciona, mas não é uma boa prática porque pode causar erros difíceis de identificar em casos mais complexos.

Para deixar o código mais seguro e claro, o ideal é converter logo após o prompt. Ajuste seu código assim:

let numeroMaximo = parseInt(prompt("Digite um número para a contagem regressiva:"));

while (numeroMaximo >= 0) {
    console.log(numeroMaximo);
    numeroMaximo--;
}

Dessa forma, você garante que numeroMaximo é um número inteiro, evitando qualquer conversão implícita inesperada.

Mas, no JavaScript temos outro operador, esse por sua vez compara o valor e o tipo, o que é bem melhor para restringir a sua comparação e deixar mais seguro a condição, esse operador é o "===" chamado de igualdade restrita. Recomendo utilizar ele em vez do "==" quando estiver desenvolvendo projetos em JavaScript.

Fico à disposição.

muito obrigado, Armano