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

isNaN

Estou com uma dúvida em relação ao código abaixo, que conforme o curso de linguagem de programação I é dado como correto após um determinado exercício. Quando o prompt pede a idade, testei alguns resultados, como por exemplo, digitar um número entre aspas ("34"), e o resultado foi correto, solicitando novamente uma idade por entender que não é um número, porém ao digitar 34r, por exemplo, o código aceitou e retornou um alerta informando 34. Não entendi direito porque isso ocorreu, pois como digitei 34r, esperava que fosse solicitar novamente uma outra idade.

<meta charset="UTF-8">
<script>
    function pulaLinha() {
        document.write("<br><br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    var idade = parseInt(prompt("Digite sua idade"));

while( isNaN(idade) ) {
    idade = parseInt(prompt("Digite sua idade"));    
}

alert(idade);

</script>
2 respostas
solução!

Danilo, o isNaN está retornando true para 34r, mas você está passando o resultado direto para o parseInt, que deveria ser feito depois. Perceba a diferença:

 var idade = parseInt(prompt("Digite sua idade"));

while( isNaN(idade) ) {
    idade = parseInt(prompt("Digite sua idade"));    
}

Agora com o parseInt so depois de dar certo:

 var idade = prompt("Digite sua idade");

while( isNaN(idade) ) {
    idade =prompt("Digite sua idade");    
}

var idadeFinal = parseInt(idade);

Se você passa para o parseInt, mesmo o isNaN retornando true você estava pegando o resultado e passando para parseInt, que retornava undefined para o caso 34r

Gostaria de complementar.

O parseInt() tenta converter em número sempre que possivel. Sendo assim

parseInt('34r'); //retorna 34

Já:

parseInt('r34');  //retorna NaN, pois o primeiro caracter não é numero

Existe uma maneira de converter em números que é um pouco menos flexível. Apenas por curiosidade:

Number('34r'); //retorna NaN
Number('r34'); //retorna NaN

A abordagem é um pouco diferente.

Abraço