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

Concatenação vira numero?

Galera desculpa a minha ignorância no assunto, estou estudando há poucos dias, mas fiquei muito confuso com a seguinte situação.

Se somarmos o conteúdo idade1(numero)+idade2(string)+idade3(numero) o resultado ficaria 102012 por que o 20 se concatenou com 10 e o 12 somou com a concatenação 1020 + 12 que fica 102012, até ai perfeito, porém, quando dividiu-se por 3 ele trouxe um resultado de divisão de um numero por 3.

Então a concatenação de uma string com um numero não deveria dar erro? ao inves de tornar o numero 102012 válido para ser divisivel por 3?

pensei que ao concatenar ele deixaria de ser numero e daria erro.

Isso é possível somente em JS ou em outras linguagens também? E isso então é valido? essa concatenação transformou aquele numero em um numero real que pode ser matematicamente aplicado?

Agradeço a atenção!

4 respostas

Primeiramente não do que pedir desculpas. Aqui é um ambiente de aprendizado e absolutamente ninguém nasce sabendo.

Agora vamos para sua dúvida.

Em programação nem sempre os símbolos representam aquilo que já sabemos. É preciso desconstruir algumas coisas: Um bom exemplo é o sinal de igual (=) que no mundo javascript (e em muitas outras linguagens de programação) representa a operação de atribuição (x = y lê-se x RECEBE y)

Desta forma, nem sempre quando utilizamos o operador + estamos somando algo. Pelo seu texto acredito que tenha entendido essa parte.

O JavaScript foi construido para "aceitar desaforos" ele tenta ao máximo entender o que está acontecendo e consertar alguns descuidos, o que pode gerar esse tipo de confusão.

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

neste exemplo da aula, o que acontece é que durante a concatenação (IDADE1 + IDADE2 + IDADE3) o javascript identifica um dos termos como string e por isso transforma tudo em string. Em seguida, na operação de divisão ele novamente identifica que a string é um numeral e a transforma para numeral fazendo a divisão.

A situação que vc prevê que aconteceria seria uma realidade apenas se um dos termos da concatenação não fosse um número (NaN). Assim o Javascript retornaria NaN no final da operação.

Exemplo negativo:

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

    document.write("A média das idades é <br>");
    document.write( (IDADE1 + IDADE2 + IDADE3) / 3); //o retorno disso será NaN
</script>

Respondendo à sua segunda pergunta: a maioria das linguagens não tem esse mesmo comportamento, mas não arrisco dizer que a isso ocorre SOMENTE em JS

Bom dia Felipe!

muito agradecido e feliz com a sua resposta, primeiro agradecendo pela qualidade da sua resposta, que não me deixou nenhuma dúvida e também por responder rápido!

Eu ia perguntar o que era (NaN) mas acredito que seja um nome, uma string nominal, se é assim que é chamado, me corrija se eu estiver errado, por favor. Com relação a informação de que o JS identifica uma string e todas as demais também serão assim identificadas não lembro de ter visto isso na aula juntamente com números, acho que passei desapercebido nessa informação, saberia me dizer se essa informação é apresentada lá?

Um abraço!

solução!

NaN é a representação que o JavaScript usa para Not a Number, ou seja, toda vez que o JavaScript espera receber um numero para tratar e recebe algo diferente ele traz NaN para orientar o programador do porquê aquilo não foi processado corretamente.

Na aula é dito sim, mas não sei te dizer se é na mesma aula. Sugiro que dê uma revisitada nos tópicos se achar valioso.

Não esquece de fechar o post como resolvido!

Grande abraço!

Caras que nível hem , ótima pergunta e excelente resposta show de (bola) DEVs kkkkkk