Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Quando o programa reconhece como número ou texto?

Fiz alguns exemplos para praticar e fiquei na dúvida qnto ao exemplo de ter um número em forma de String com " " e outro sem, pois ao tentar fazer uma operação de subtração, o programa somente aparece NaN no chrome. E quando coloco "45"-32 entre parenteses ele faz a operação normalmente. Ele está considerando o -32 como um parâmetro?

A idade do Flávio é 45

Eu tenho 32 anos e nasci em 1989

A média entre minha idade e a do Flávio é de 38.5

NaN anos

<meta charset="UTF-8">

<script>

    document.write("A idade do Flávio é " + ((10 + 20)*3)/2 + "<br>");
    document.write("Eu tenho " + (2021 - 1989) +" anos e nasci em " +(2021-32) + "<br>");
    document.write("A média entre minha idade e a do Flávio é de " +(45+32)/2 + "<br>");
    document.write("A diferença entre nossas idades é de " + "45"-32 + " anos");


</script>
1 resposta
solução!

Olá, Roger, tudo bem?

Vamos lá, o javascript possui uma característica chamada de Automatic Type Conversion (Conversão Automática de Tipo), isso quer dizer que quando ele encontra operações entres dados de diferentes tipos, ele tenta convertê-los de modo a satisfazer a operação.

Então quando escrevemos, por exemplo, console.log("45" - 32), o javascript fará o seguinte: ele identificará que há uma operação matemática de subtração, para satisfazê-la ele tentará converter a string "45" para um número e assim a operação 45 - 32 é realizada normalmente.

No entanto, no caso que você trouxe temos o seguinte:

document.write("A diferença entre nossas idades é de " + "45"-32 + " anos");

Isso não funcionou da forma esperada basicamente porque "45" - 32 não estão entre parênteses. Então o javascript irá realizar as operações na ordem da esquerda para a direita (nesse caso, já que há apenas os operadores + e -). A expressão será avaliada de acordo com esse passo a passo:

  • "A diferença entre nossas idades é de " + "45" - 32 + " anos"
  • "A diferença entre nossas idades é de 45" - 32 + " anos"
  • NaN + " anos"
  • "NaN anos"

Do 1º para o 2º passo, o JS concatena as strings "A diferença entre nossas idades é de " e "45". Do 2º para o 3º passo, o JS tenta fazer uma subtração entre a string resultante e o número 32. Porém, o JS não conseguiu conveter a string "A diferença entre nossas idades é de 45" corretamente para um número, e por isso a operação resulta no tipo NaN, que significa Not-a-Number (Não é um número). Esse tipo de dado aparece justamente nesses casos, onde tentamos realizar uma operação matemática e ela não é feita com sucesso. Por fim, do 3º para o 4º passo, o JS realiza a conversão automática de tipo novamente, transformando NaN para uma string e concatenando com a string anos.

Ou seja, para corrigir, basta colocar "45"-32 entre parênteses, como já foi dito, assim:

document.write("A diferença entre nossas idades é de " + ("45"-32) + " anos");

Assim, a expressão será avaliada na ordem correta, primeiramente subtraindo 45 e 32, e depois concatenando com as outras partes da frase.

Espero ter te ajudado! Se tiver mais dúvidas ou dificuldades, ficaremos felizes em te auxiliar. Abraços e bons estudos! :)

Caso esta resposta tenha resolvido sua dúvida, por favor, marque como solucionada ✓. Bons Estudos!