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

Por que com um símbolo de igual dá errado?

Boa tarde pessoal, implementei o código errado e o correto para treinar. Consegui entender que um símbolo de igual significa que a variável à esquerda recebe o que está à direita do símbolo. Acontece que fiquei na dúvida: porque dentro do if se tiver apenas um símbolo não funciona? No meu ver, a linha a seguir significa: "Se (a variável quantidadeCarbono1 recebe o conteúdo da quantidadeCarbono2){}

if(quantidadeCarbono1 = quantidadeCarbono2){  }

Sendo assim, porque não funciona, sendo que em nenhum momento anterior do código a variável quantidadeCarbono1 recebeu o conteúdo da variável quantidadeCarbono2?

Obrigado a quem puder esclarecer.

Segue o código completo:

<meta charset="utf-8">

<script>
  function pulaLinha(){
    document.write("<br>");
  }

  function mostra(texto){
    document.write(texto);
  }

  var quantidadeCarbono1 = parseInt(prompt("Digite a quantidade de carbono do elemento 1: "));
  var quantidadeCarbono2 = parseInt(prompt("Digite a quantidade de carbono do elemento 2: "));

  quantidadeCarbono2 = quantidadeCarbono2 + 2;

  if(quantidadeCarbono1 = quantidadeCarbono2){
    mostra("Acho que são elementos parecidos!");
  }else{
    mostra("São elementos diferentes!");
  }

</script>
2 respostas
solução!

É uma herança de outras linguagens, como C. Em algumas linguagens, isso nem compilaria.

A história é longa:

quando você faz a = b, o valor dessa expressão é b, tanto que você pode escrever var a = b = 1; e o a fica valendo 1.

Então se você faz if(quantidadeCarbono1 = quantidadeCarbono2) o quantidadeCarbono1 fica valendo quantidadeCarbono2 e o resultado do if vai depender de quanto vale quantidadeCarbono2.

E a razão histórica entra aqui: em C, assim como no JavaScript, o if vai considerar true qualquer valor que seja diferente de zero. Então, se o seu quantidadeCarbono2 for diferente de zero, esse if vai entrar!

Basta lembrar que = é para atribuicao: copia o valor da direta para a esqueerda. O == é para comparação, vê se os valores são "iguais".

Obrigado pela ajuda xará.