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

[DÚVIDA] Exercício 11 - Módulo 3

<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>

Esse código exibiu no navegador: A média das idades é 34004

O navegador concatenou as variáveis de dentro do parentes (102012) e dividiu por 3. Se a parte de dentro do parênteses estava sendo considerada como string, devido a var IDADE 2 (""), por que o navegador efetua a divisão (se não é número)?

Entendi o que aconteceu, mas não entendi a lógica. Alguém me ajuda por favor.

3 respostas
solução!

é um problema de uma linguagem não tipada, o javascript sempre olha o entorno das variáveis pra decidir qual é o tipo dela. Se tiver como fazer uma operação seguindo o tipo que ele declarou anteriormente ele segue, que é o caso da concatenação. Caso contrário ele tenta fazer a conversão para o tipo que a operação se segue. Uma coisa interesante de se notar é que se você fizer o seguinte:

console.log(2 == "2")

O resultado será true, porque o javascript meio que faz uma conversão para um dos tipos pra conferir se o valor é igual. Para fugir disso temos a operação de extritamente igual, que não faz conversão:

console.log(2==="2")

Dai ele compara o valor e o tipo da variável, tem muitas coisas que acontecem por baixo dos panos de conversões em linguagens não tipadas.

Muito obrigado!!! Dei um Google aqui em linguagens não tipadas e começou a fazer sentido.

Só complementando a resposta do amigo acima, Nesse caso, como o javascript não tem como somar número + string, vai usar o sinal de + para concatenar os números com a string, assim vai converter tudo em só uma string.

("102012")

Quando você pega essa string que só contem números e faz outra operação (no caso a divisão) o javascript novamente analisa o contexto, "ver" que só existe números na string, vai la e converte a string em número.

Para fazer funcionar como esperado, sem correr risco de concatenar ao invés de somar, você pode tratar o dados recebidos antes ou na hora de fazer a soma, usando uma função própria do javascript parseInt() , você pode tratar o dados recebidos antes ou na hora de fazer a soma, usando uma função própria do javascript parseInt() que analisa a string e retornar um número inteiro.