Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Por que ao colocar o imc da seguinte forma buga?

Ao tentar colocar a terceira condicional, aquela que diz que o peso está em uma intersecção, logo, maior/igual que 18.5 e menor/igual que 35, fiz da seguinte forma:

if (18.5<= imc <= 35){

mostra("Seu peso está na média");

}

Quando o resultado estava na média, ele apareceu normalmente e ignorou os outros, entretanto, quando o resultado foi maior que 35, ou menor que 18.5, ele mostrou tanto o resultado de que estava na média, assim como o resultado esperado, no caso de maior que 35, acima da média, por exemplo.

1 resposta
solução!

Boa tarde Fernando, isso acontece pois o JavaScript é uma linguagem de tipagem fraca, isso quer dizer que você consegue realizar comparações, atribuições e etc entre diversos tipos de dado e isso não retornará nenhum erro, por exemplo você pode comparar um booleano (true / false) com um inteiro.

No seu exemplo o que acontece é que você tem 2 expressões sendo executadas, a primeira é 18.5 <= imc, isso vai te retornar um booleano, após isso o resultado dessa operação será utilizado para avaliar a segunda expressão, então se o imc for 19 por exemplo teremos o seguinte:

(18.5 <= 19) <= 35
true <= 35
true

isso acontece pois o JavaScript converte automaticamente o valor booleano em inteiro para realizar a comparação, o booleano true assume o valor inteiro 1, e o booleano false assume o valor inteiro 0, você pode atestar isso executando no console o seguinte código:

console.log(+true);
console.log(+false);

Por isso, não importa qual resultado a variável IMC tenha, sempre resultará em um true no final.

Você nunca deve realizar comparações dessa forma como você fez, sempre utilize os operadores lógicos, a expressão correta seria a seguinte:

if(imc >= 18.5 && imc <= 35) {
    mostra("Seu peso está na média");
}

Espero ter ajudado!