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

修改身高/体重后,JS中if/else语句未更新BMI判断结果

问题原因排查
  • 核心问题:你在条件判断中直接使用mark.bmi和john.bmi这两个属性,但它们只有在调用calcBMI()方法时才会被计算并赋值。初始运行时,因为后续console.log里调用了calcBMI(),所以bmi属性被赋予了初始值;但修改John的身高/体重后,你没有重新调用calcBMI()更新bmi属性,条件判断依然基于旧的bmi值,导致结果无法同步更新。

  • 具体分析:
    代码里的三元判断逻辑mark.bmi < john.bmi ? ... : ...,依赖的是对象上已存在的bmi属性。这个属性不会自动跟随mass或height的变化重新计算,只有主动调用calcBMI()时,才会根据当前的身高体重更新bmi值。修改参数后不重新计算,判断逻辑自然还是用旧数据。

  • 修复方案:
    不要直接依赖对象上的bmi属性做判断,而是先调用calcBMI()获取最新的BMI值,确保判断逻辑基于最新的身高体重数据:

const mark = {
    fullName: 'Mark Miller',
    mass: 78,
    height: 1.69,
    calcBMI: function () {
        this.bmi = this.mass / (this.height * this.height);
        return this.bmi
    }
};

const john = {
    fullName: 'John Smith',
    mass: 92,
    height: 1.95,
    calcBMI: function () {
        this.bmi = this.mass / (this.height * this.height);
        return this.bmi
    }
};

// 先计算最新BMI值再做判断
const markLatestBMI = mark.calcBMI();
const johnLatestBMI = john.calcBMI();

markLatestBMI < johnLatestBMI 
  ? console.log(`${john.fullName}'s BMI ${johnLatestBMI} is greater than ${mark.fullName}'s BMI of ${markLatestBMI}`) 
  : console.log(`${mark.fullName}'s BMI ${markLatestBMI} is greater than ${john.fullName}'s BMI of ${johnLatestBMI}`);

修改后,每次运行代码都会重新计算两人的BMI,修改参数后的结果也会同步更新。

内容的提问来源于stack exchange,提问作者Thomas Ventura

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:10:27