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

Dúvida sobre conversão de string para número

No código:

<meta charset="UTF-8">
<script>
    var IDADE1 = 10;
    var IDADE2 = "20";
    var IDADE3 = 12;

    document.write("A média das idades é <br>");
    document.write( (IDADE1 + IDADE2 + IDADE3) / 3);
</script>

Temos o resultado:

A média das idades é 34004

==========================================================

Minha dúvida seria em como se chegou ao resultado "34004".

Pelo que vi, uma das variáveis é uma string (var IDADE2 = "20";), desse modo, ao meu ver, o programa concatenaria as variáveis do seguinte modo:

10 + "20" + 12 = "102012"

Mas não foi isso que aconteceu, pois o Javascript não gerou uma string como resultado desse cálculo e nem poderia, já que não é possível dividir "102012" (uma string), por 3 (ao dividir 102012 por 3, temos como resultado 34004).

Desse modo, podemos concluir que a string atribuída "102012" foi convertida para número pelo Javascript? O Javascript sempre tenta converter o resultado para algo mais plausível em situações parecidas?

2 respostas

No caso javascript e uma linguagem fracamente tipada, ou seja sim ela interpretou que aquele "20" era igual a um 20 e realizou o calculo.

Em qualquer outra linguagem de programação fortemente tipada como java, c e etc isso não poderia acontecer porque nessas linguagens "20" e diferente de 20 e com isso ele daria erro.

Esse fator de tipagem fraca acaba tornando o desenvolvimento mais agil pois vc não tem a necessidade de ficar convertendo o tipo de determinados valores.(só isso poupa um tempão).

Porem torna a manutenção mais difícil afinal todas as conversões de tipo ficam implícitas no código dificultando a leitura e compreensão do mesmo.

Grande abraço, espero ter ajudado.

solução!

Vamos lá:

var IDADE1 = 10;
var IDADE2 = "20";
 var IDADE3 = 12;

Qual é o resultado da soma? Como tem uma string no meio, será uma concatenação, o valor será 102012. Agora, qual é o resultando da string "102012" dividido por 3? Podemos dividir uma string por 3? Sim, porque o JavaScript faz conversão implícita se a string conter apenas números. Sendo assim "102012"/3 é 34004. Veja, o resultado não é uma string, mas um número.

É por isso que ao longo do treinamento eu peço para que conversões sejam feitas explicitamente para que o programador não seja pego de surpresas com essas conversões "doidas" do JavaScript.

Agora, se você fizer "10" + "10" ai ele não entende NUNCA que é para converter, ele sempre faz concatenação.