IMC计算器Switch语句异常:始终显示默认提示信息求助
问题分析
你的IMC计算器始终显示默认提示,核心有两个问题:
- switch语句用法错误:当前以计算出的
bmi值作为switch判断目标,但case里写的是布尔表达式(比如bmi < 18.5),JavaScript会拿bmi的值和布尔值true/false做严格相等(===)比较,几乎不可能匹配任何case,直接进入default分支。 - 数据类型不匹配:
toFixed(2)会把数值转换成字符串,后续用字符串和数值做大小比较,逻辑会出现错误。
修复方案
- 保留
bmi的数值类型,直到最后渲染时再处理格式转换。 - 将switch的判断目标改为
true,让每个case的布尔表达式直接求值匹配对应分支。 - 对输入的体重和身高做数值转换,避免非数字输入导致计算异常。
修正后的代码
const form = document.querySelector('#form'); form.addEventListener('submit', (e) => { e.preventDefault(); // 转换输入为数值类型 const weight = parseFloat(document.querySelector('#weight').value); const height = parseFloat(document.querySelector('#height').value); // 保留数值类型计算,不提前转字符串 const bmi = weight / (height ** 2); const value = document.querySelector('#value'); let description = ''; document.querySelector('#infos').classList.remove('hiden'); // 以true为判断目标,让case表达式直接求值匹配 switch(true){ case bmi < 18.5: description = 'Cuidado! Você está abaixo do peso!'; break; case bmi >= 18.5 && bmi <= 25: description = "Você está no peso ideal!"; value.classList.remove('attention'); value.classList.add('normal'); break; case bmi > 25 && bmi <= 30: description = "Cuidado! Você está com sobrepeso!"; break; case bmi > 30 && bmi <= 35: description = "Cuidado! Você está com obesidade moderada!"; break; case bmi > 35 && bmi <= 40: description = "Cuidado! Você está com obesidade severa!"; break; case bmi > 40: description = "Cuidado! Você está com obesidade morbida!"; break; default: description = "verifique novamente"; break; } // 渲染时再处理格式,转成带两位小数的字符串并替换小数点 value.textContent = bmi.toFixed(2).replace('.', ','); document.querySelector('#description').textContent = description; });
内容的提问来源于stack exchange,提问作者Milla Dma
相关产品推荐
相关产品推荐

