修改身高/体重后,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
相关产品推荐
相关产品推荐

