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!