【问题标题】:can't assign number to a variable in an if statement Javascript无法在if语句Javascript中为变量分配数字
【发布时间】:2015-05-17 23:29:44
【问题描述】:

我正在用 Javacsript 编写一个函数,它返回两个变量,Consume 和 Burn。这是函数:

function calories(goal, goalWeight, activityLevel, days, gender, age, height, weight){
                var bmr=0;
                var consume=0;
                var burn=0;
                if (gender==='F'){
                    bmr = 655 + (4.3*weight) + (4.7*height) - (4.7*age);
                }
                if (gender==='M'){
                    bmr = 66 + (6.3*weight) + (12.9*height) - (6.8*age);
                }
                if (activityLevel==='Inactive'){
                    consume=bmr+(0.2*bmr);
                }
                if (activityLevel==='Relatively Active'){
                    consume=bmr+(0.3*bmr);
                }
                if (activityLevel==='Very Active'){
                    consume=bmr+(0.4*bmr);
                }
                if (goal==='Lose'){
                    if((goalWeight/days)<=0.06){
                        consume=consume-200;
                    }
                    if((goalWeight/days)<=0.15){
                        consume=consume-100;
                    }
                    if (activityLevel==='Inactive'){
                        burn=250;
                    }
                    if (activityLevel==='Relatively Active'){
                        burn=150;
                    }
                    if (activityLevel==='Very Active'){
                        burn=100;
                    }
                }
                if(goal==='Gain'){
                    if((goalWeight/days)<=0.06){
                            consume=consume+200;
                        }
                    if((goalWeight/days)<=0.15){
                        consume=consume+100;
                    }
                    if (activityLevel==='Inactive'){
                        burn=200;
                    }
                    if (activityLevel==='Relatively Active'){
                        burn=100;
                    }
                    if (activityLevel==='Very Active'){
                        burn=100;
                    }
                }
                if(goal==='Maintain'){
                    burn=100;
                }
                consume=Math.round(consume);
                window.alert(consume);
                window.alert(burn);
                return [consume,burn];
            }

在窗口框中,函数每次都返回正确的消费值,但由于某种原因,burn 总是返回为零。如果我没有在 if 语句之外声明它,它会以未定义的形式返回。是否有某些原因我不能在 if 语句中为这个变量分配数字?我已经使用 window.alert() 来测试是否正在访问正确的 if 语句,并且每次它都返回我想要的内容,但是 burn 从未被赋值,我不知道为什么!感谢您的任何建议

编辑 感谢您到目前为止的答案。一个示例输入是:

var calories = calories(goal, healthyWeight, activityLevel, days, gender, age, height, weight);

在哪里:

goal = 'Lose'
healthyWeight = 128
activityLevel = 'Inactive'
days = 180
gender = 'M'
age = 20
height = 63
weight = 160

这将按预期返回消耗为 2101,并返回燃烧为 0

目前我对返回值所做的只是:

window.alert(consume);
window.alert(burn);

测试它们是什么值,但是一旦函数正常工作,我将使用

var consume=calories.consume;
var burn=calories.burn;
document.getElementById("consume").innerHTML = consume;
document.getElementById("burn").innerHTML = burn;

在浏览器之外显示它们的函数

【问题讨论】:

  • 你能说明你是如何使用返回值的吗?

标签: javascript if-statement variable-assignment


【解决方案1】:

return [consume,burn]; 将完全按照您的要求执行,因此当您调用 calories(...) 函数然后访问结果时,您似乎做错了什么。

你应该这样做:

var result = calories(...);
console.log(result[0]);     // consume value
console.log(result[1]);     // burn value

【讨论】:

  • 只是为了说明:使用 ES6 你可以像let [consume,burn] = calories(...);一样简单地做到这一点
  • @c-smile - 我想知道多久我们会觉得我们可以在客户端浏览器代码中不受惩罚地使用 ES6,而不用担心某些用户群缺乏浏览器支持?我猜服务器端使用和客户端使用转译器将是第一位的。
  • 我试过这个,它返回 2101 0 到控制台,所以烧录总是被返回为 0 仍然
  • @LucyWalsh - 那么函数的输入不会导致您正确设置 burn 值。因此,您传递给函数的参数或函数中的逻辑都不是应该的。如果不确切知道您传递给函数的内容,我们无能为力。
  • 以防万一有人再次偶然发现这个问题,这个^^就是问题所在!问题中提供的解决方案很有效:)
【解决方案2】:

可能主要原因是您的函数没有正确的输入。请提供示例输入。

你应该使用 if-else 语句,例如

if (gender==='F') {
  bmr = 655 + (4.3*weight) + (4.7*height) - (4.7*age);
} else {
  bmr = 66 + (6.3*weight) + (12.9*height) - (6.8*age);
}

或 if-else if-else 结构在 else 中带有警报 - 当您的输入与您的 if 不匹配时

if (gender==='F') {
  bmr = 655 + (4.3*weight) + (4.7*height) - (4.7*age);
} else if (gender==='M' {
  bmr = 66 + (6.3*weight) + (12.9*height) - (6.8*age);
} else {
  window.alert('wrong gender: ' + gender);
}

【讨论】:

  • 您的第二个 sn-p 中有错字。也请先关注这个问题。这个答案应该是评论。
猜你喜欢
  • 2021-02-02
  • 2018-07-31
  • 1970-01-01
  • 2014-03-05
  • 2018-04-02
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多