Patric,
Quando utilizamos condiçoes temos que sempre analisa-la para verificar se esta trazendo o que queremos.
no caso que você descreve:
(peso <= 10 || peso >= 300 && altura <= 50 || altura >= 3.00)
Acredito que você queira como resposta verdadeira quando peso estiver entre 10 e 300 e a altura 0.50 e 3 correto?
Se sim esta logico não irá funcionar por dois fatores. O primeiro que o 50 esta em numero inteiro e na realidade é decimal.
E o segundo ponto é que quando utilizamos and && e or || na maioria das vezes devemos separar entre parenteses dependendo do resultado esperado.
Vamos avaliar a sentença quando for executador:
Primeiro será executado a validação peso<=10, se esta for verdadeira por padrão não se continua a validação pois a próxima condicional é or (||) desta forma não será validada a altura.
Ou seja a condição não será valida.
A condição correta seria:
((peso <= 10 || peso >= 300) && (altura <= 50 || altura >= 3.00))
Desta forma, primeiro verifica-se o peso e depois a altura.
Mas para ficar mais claro colocaria o codigo da seguinte forma:
if( (peso > 10 && peso < 300 ) && (altura > 0.50 && altura < 3.00)){ tdImc.textContent = imc;
}else{
alert("Peso ou altura inválidos");
tdImc.textContent = "Inválido";
}
ou
if( peso > 10 && peso < 300 && altura > 0.50 && altura < 3.00){ tdImc.textContent = imc;
}else{
alert("Peso ou altura inválidos");
tdImc.textContent = "Inválido";
}