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

Dúvida prompt()

Boa noite, galera!

Estou com uma dúvida no comando prompt(). Na aula 06, no primeiro tópico (convertendo textos em números), o professor Flávio disse que o

comando prompt só armazena strings e que para armazenar números, deveriamos usar o comando parseInt() e o prompt() dentro. Mas no tópico "

melhorando o programa do Imc", percebo que dentro do prompt, ele está armazenando alturas e idades sem fazer uso do comando parseInct().

Alguém poderia me explicar melhor essa situação?

2 respostas
solução!

Olá, Luiz, tudo bem?

Ótima pergunta e bem percebido! Vamos considerar o seguinte código:

var alturaInformada = prompt(nome + ", informe sua altura");
var pesoInformado = prompt(nome + ", informe seu peso");

var imc = calculaImc(alturaInformada, pesoInformado);

As variáveis alturaInformada e pesoInformado são realmente strings, porque é o que o comando prompt retorna. Agora vamos considerar o código da função calculaImc:

  function calculaImc(altura, peso) {
    return peso / (altura * altura);
  }

Mesmo que nessa função os parâmetros altura e peso sejam strings, o javascript realiza nesse caso o que chamamos de Automatic Type Conversion (Conversão Automática de Tipo). Basicamente se o JS encontrar os operadores de subtração (-), multiplicação (*) ou divisão (/) sendo realizados entre strings, ele tentará convertê-las para números e realizar as operações matemáticas normalmente, e por isso o código acima funciona.

Mas e o operador +? Bom, você deve tomar mais cuidado ao utilizá-lo, pois além de funcionar como operador de soma, ele também funciona como operador de concatenação. Então se você tentar "somar" duas strings, o JS simplesmente irá juntá-las em uma string só, em vez de convertê-las para números e somá-los.

Você pode ler mais sobre conversão de tipo nesse artigo da W3Schools. Há uma seção que fala sobre Automatic Type Conversion.

Espero ter ajudado! Qualquer dúvida estaremos aqui para te auxiliar. Bons estudos! :)

Entendi. Muito obrigado!!