我对某些代码感到困惑但我不确定为什么它不起作用。
这是一个If函数......
if (calorie_total<100)
{
$("#awards_info").html('bad');
}
else if (200>calorie_total>100)
{
$("#awards_info").html('okay');
}
else if (400>calorie_total>300)
{
$("#awards_info").html('good');
}
else (calorie_total>400);
{
$("#awards_info").html('great');
}
Bascailly它正在查看总卡路里,然后告诉你你做得多好。
但出于某种原因,即使卡路里低于0,它总是说“很棒”?
任何想法都会很棒?
谢谢
答案 0 :(得分:5)
JavaScript关系运算符不能像您的代码所暗示的那样工作。您必须进行两个与&&
else if (200 > calorie_total && calorie_total > 100)
在这种特殊情况下,您并不需要这样做。如果你进入else
,那么这意味着“calorie_total”不得小于或等于100.事实上,如果“calorie_total”恰好是100,这段代码将不会做任何事情!
答案 1 :(得分:4)
当你说
之类的话if (200>calorie_total>100)
假设calorie_total
是150,它基本上就像这样评估
(200 > 150) > 100
是
true > 100
返回
false
因此所有条件都失败了,而其他部分总是被执行。要获得你真正想要的东西,你需要改变这样的条件
if (calorie_total < 200 && calorie_total > 100)
并且您的else
部分不应具有任何条件(calorie_total>400);
。
在此处详细了解强制规则http://webreflection.blogspot.in/2010/10/javascript-coercion-demystified.html
console.log(true == 1)
console.log(false == 0)
<强>输出强>
true
true
现在我们知道,true
== 1和false
== 0,我们可以评估其余条件。
答案 2 :(得分:1)
你不能在JavaScript中做200>calorie_total>100
之类的事情(至少它不像你想象的那样工作)。您之前的检查意味着calorie_total > 100
,因此您可以省略它,从而产生else if (calorie_total < 200)
。如果你真的想要仔细检查,你将不得不使用逻辑AND运算符 - &&
。例如if (200 > calorie_total && calorie_total >100)
。
答案 3 :(得分:1)
200>calorie_total>100
和400>calorie_total>300
不会做您想要达到的目标。 JavaScript将读取第一个>
并比较这些值。如果我们为if
分解200>calorie_total>100
声明,我们最终会:
200 > calorie_total > 100 /* Evaluates to... */
(200 > calorie_total) > 100 /* Evaluates to... */
(false) > 100 /* Or... */
(true) > 100
这两个都会评估为false
。
您需要做的是使用&&
运算符:
if (200 > calorie_total && calorie_total > 100) { ... }
如果我们要打破这一点,我们最终会:
200 > calorie_total && calorie_total > 100 /* Evaluates to ... */
true and true /* Or... */
true and false /* Or... */
false
如果值两者评估为true
,则您的if
语句将为true
。如果其中一个评估为false
,则您的if
语句将为false
。
答案 4 :(得分:1)
我认为最后一行很奇怪,你可能想要改变
else (calorie_total>400);
{
$("#awards_info").html('great');
}
通过
else if (calorie_total>400)
{
$("#awards_info").html('great');
}
答案 5 :(得分:1)
您需要将最后一个else
语句转换为else if
语句。
else if (calorie.total>400) {
/* Code */
}
通过将其设为else
,如果没有其他条件可以运行,它应该正常运行。