You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS实现BMI计算器prompt输入返回NaN 传固定参数正常

问题根因

你的代码返回NaN是几个明确的逻辑错误导致的:

  • prompt()弹窗的用户输入返回值没有被变量接收,弹窗输入的体重、身高数据根本没有进入计算流程
  • 弹窗逻辑后手动写了bmi=0; weight=0; height=0;,直接把两个计算参数重置为0,0除以0的运算结果就是NaN
  • 所有计算用的变量都没有加let/const声明,会意外污染全局作用域,引发不可预知的异常
  • BMI区间判断存在逻辑漏洞:35以上的体重区间没有覆盖,且多个判断条件的边界值重复
  • alert()执行后没有返回值,你把alert的执行结果赋值给返回值,最终return的结果永远是undefined
  • prompt()默认返回字符串类型,虽然JS有隐式类型转换,但直接做除法运算存在隐式转换失败的风险
修正后代码
function bmiCalculator (weight, height) {
    // 未传入参数时,通过弹窗接收用户输入,同时转为数字类型
    if (weight === undefined) {
        weight = Number(prompt("Enter your weight in kg: "));
    }
    if (height === undefined) {
        height = Number(prompt("Enter your height in meters: "));
    }
    // 声明计算变量,删除错误的参数重置逻辑
    let bmi = weight / (height * height);
    let weightLevel;
    // 修正区间判断逻辑,补全所有体重范围覆盖,移除重复边界判断
    if (bmi < 18.5) {
        weightLevel = "Underweight";
    } else if (bmi < 25) {
        weightLevel = "NORMAL";
    } else if (bmi < 30) {
        weightLevel = "OVERWEIGHT";
    } else if (bmi < 35) {
        weightLevel = "OBESE";
    } else {
        weightLevel = "EXTREMELY OBESE";
    }
    const result = `Your BMI is ${bmi.toFixed(1)}, therefore you are ${weightLevel}`;
    alert(result);
    return result;
}

// 无参调用走弹窗输入流程
bmiCalculator();
// 固定参数调用可直接得到计算结果:执行bmiCalculator(60,2)会返回BMI 15.0,对应体重过轻

内容的提问来源于stack exchange,提问作者Gerald Maginoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:24:23