JavaScript初学者技术咨询:两种BMI计算代码哪种更优?求推荐更佳写法
JavaScript BMI计算代码规范对比与优化建议
嗨!咱们来仔细分析下你这两段代码的写法,看看哪种更规范优质,再聊聊更优的实现方式~
首先要指出你两种写法里的共同问题:重复调用calcBMI()函数。每次调用这个函数,不仅会重新计算BMI值,还会给对象的bmi属性赋值——虽然这里计算量很小,重复执行不会有明显性能问题,但这是个不好的编程习惯,而且完全没必要做重复劳动。
两种写法的优缺点分析
第一种写法(三元运算符):
这段代码把比较和字符串拼接挤在了一行,看似简洁但可读性极差——这么长的三元表达式,一眼扫过去很难快速理清逻辑。更关键的是,这里一共调用了4次calcBMI()(判断条件里2次,字符串模板里2次),完全是在做无用功。第二种写法(if-else):
思路比第一种要合理:先提前调用calcBMI()把BMI值存到对象的bmi属性里,避免了判断时重复计算。但可惜的是,在console.log里又重复调用了calcBMI(),等于又多算了4次,把之前的优势完全浪费了。
更优的实现方式
咱们可以结合两种写法的优点,同时避免重复计算的问题,还能让代码更简洁规范。这里有两种推荐的写法:
写法一:清晰的分步逻辑(适合逻辑复杂的场景)
const mark = { fullName: "Mark Miller", mass: 78, height: 1.69, // 用ES6方法简写,比function写法更简洁规范 calcBMI() { this.bmi = this.mass / this.height ** 2; return this.bmi; }, }; const john = { fullName: "John Smith", mass: 92, height: 1.95, calcBMI() { this.bmi = this.mass / this.height ** 2; return this.bmi; }, }; // 只计算一次BMI,把结果存到变量(也可以直接用mark.bmi/john.bmi) const markBMI = mark.calcBMI(); const johnBMI = john.calcBMI(); let resultMessage; if (markBMI > johnBMI) { resultMessage = `${mark.fullName}'s BMI (${markBMI}) is higher than ${john.fullName}'s (${johnBMI})!`; } else { resultMessage = `${john.fullName}'s BMI (${johnBMI}) is higher than ${mark.fullName}'s (${markBMI})!`; } console.log(resultMessage);
写法二:简洁的三元表达式(适合逻辑简单的场景)
如果判断逻辑比较简单,也可以用三元表达式,但前提是先算好BMI值,避免重复调用函数:
const mark = { fullName: "Mark Miller", mass: 78, height: 1.69, calcBMI() { this.bmi = this.mass / this.height ** 2; return this.bmi; }, }; const john = { fullName: "John Smith", mass: 92, height: 1.95, calcBMI() { this.bmi = this.mass / this.height ** 2; return this.bmi; }, }; const markBMI = mark.calcBMI(); const johnBMI = john.calcBMI(); const resultMessage = markBMI > johnBMI ? `${mark.fullName}'s BMI (${markBMI}) is higher than ${john.fullName}'s (${johnBMI})!` : `${john.fullName}'s BMI (${johnBMI}) is higher than ${mark.fullName}'s (${markBMI})!`; console.log(resultMessage);
优化点总结
- 避免重复计算:只调用两次
calcBMI(),把结果存起来复用,不要反复执行相同的计算逻辑 - 遵循ES6语法规范:用
calcBMI()代替calcBMI: function(),这是现代JavaScript的标准写法,更简洁清爽 - 可读性优先:逻辑复杂时分步写if-else,逻辑简单时再用简洁的三元表达式,不要为了“一行代码”牺牲可读性
内容的提问来源于stack exchange,提问作者noharm
相关产品推荐
相关产品推荐

