【问题标题】:Conditional Statement ignored条件语句被忽略
【发布时间】:2016-02-09 20:15:39
【问题描述】:

我目前正在尝试开发一个简单的移动应用程序来计算您的 BMI、BMR 等。

有两个单独的公式可以计算男性和女性的 BMR。

男性:66+(13.7 * 体重)+(5 * 身高 * 100)-(6.8 * 年龄)

对于女性:655+(9.6 * 体重)+(1.8 * 身高 * 100)-(4.7 * 年龄)

问题: 我使用了 if else 语句,如果用户单击表单页面上的“男性”单选按钮,应用程序将识别出用户是男性并使用男性 BMR 公式计算他的 BMR。男性BMR计算顺利,结果显示在calculateinput.html页面

例如如果体重=100,身高=2,年龄=18,性别=男性,我会得到 2313.6 作为 BMR,这是正确的。

但是,如果我点击表单页面上的“女性”单选按钮,应用程序仍然使用男性 BMR 公式,而不是女性 BMR 公式来计算她的 BMR。 如果 weight=100,height=2,age=18,gender=female,我仍然会得到 2313.6,这是不正确的。

似乎我的代码忽略了用户的性别输入并应用男性 BMR 公式,而不管表单页面上无线电发送的性别如何,尽管我的 if else 声明...

有人能指出并指出我犯了什么错误吗? 感谢您的解释!

以下是我在 common.js 中的代码

function bmr(gender, height, weight, age){
var calculatedbmr;
if (gender="male"){
calculatedbmr=66+(13.7 * weight)+(5 * height * 100)-(6.8 * age);
}	
else if(gender="female"){
calculatedbmr=655+(9.6 * weight)+(1.8 * height * 100)-(4.7 * age);	
}
return calculatedbmr;
}

以下是我的显示结果页面的代码。(命名为calculateinput.html)

<!DOCTYPE html>
<html>
               <head>
                       <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
                       <meta name="format-detection" content="telephone=no">
                       <meta name="msapplication-tap-highlight" content="no">
                       <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
                       <link rel="stylesheet" type="text/css" href="css/index.css">
                       <link rel="stylesheet" href="js/jquery.mobile-1.4.5.min.css">
                       <script src="js/jquery-1.11.3.min.js"></script>
                       <script src="js/jquery.mobile-1.4.5.min.js"></script>
                       <script src="common.js"></script>
        
                       <script type="text/javascript">
                       var mybmi = localStorage.getItem("bmi");         
                       
                       var weightcategory;
                       if (mybmi<18.5){
                    	   weightcategory = "Underweight";
                       }
                       else if ((mybmi>=18.5)&&(mybmi<=24.99)){
                    	   weightcategory = "Normal Weight";
                       }
                       else if ((mybmi>=25)&&(mybmi<=29.99)){
                    	   weightcategory = "Overweight";
                       }
                       else if ((mybmi>=30)&&(mybmi<=34.99)){
                    	   weightcategory = "Class 1 Obesity";
                       }
                       else if ((mybmi>=35)&&(mybmi<=39.99)){
                    	   weightcategory = "CLass 2 Obesity";
                       }
                       else if (mybmi>=40){
                    	   weightcategory = "Morbidly Obese";
                       }
                       
                       var theloseorgainmessagethatappears = localStorage.getItem("loseorgain"); 
                       
                       var theweightdifference = localStorage.getItem("weightdifference");
                       
                         
                       var thebmrrate = localStorage.getItem("bmrrate");
                       
                      
                       
                       </script>     
              </head>
              
              
              <body>
                    <div data-role="page" id="mainpage">
                    
			        <div data-role="header">
				    <a href="#" onclick="home()" class="ui-btn ui-icon-home ui-btn-icon-left">Home</a>
				    <h1>BMI Calculator</h1>
			        </div>	
			
			        <div data-role="main" class="ui-content">
			        <b>Your Results:</b><br><br>
			        Your weight category: <script>document.write(weightcategory)</script><br><br>
			        Your BMI is : <script>document.write(mybmi)</script><br><br>
			        <script>document.write(theloseorgainmessagethatappears)</script><br><br>
			        Your BMR is : <script>document.write(thebmrrate)</script> <br><br>
			        
			        Weight Difference: <script>document.write(theweightdifference)</script>
			        
			        </div>	
			
			        <div data-role="footer" style="text-align:center;"> 
			        Developed by The Dom        
                    </div>   
                    
	              	</div>
    

                    <script type="text/javascript" src="cordova.js"></script>
                    <script type="text/javascript" src="js/index.js"></script>
              </body>
</html>

以下是用户输入输入的表单页面上的代码。

<!DOCTYPE html>
<html>
        <head>
              <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
              <meta name="format-detection" content="telephone=no">
              <meta name="msapplication-tap-highlight" content="no">
              <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
              <link rel="stylesheet" type="text/css" href="css/projectindex.css">
              <link rel="stylesheet" href="js/jquery.mobile-1.4.5.min.css">
              <script src="js/jquery-1.11.3.min.js"></script>
              <script src="js/jquery.mobile-1.4.5.min.js"></script>
              <script src="common.js"></script>
              <script type="text/javascript">
               function calculate(){
               var bmi = bodymassindex(document.bmiform.height.value, document.bmiform.weight.value);
               localStorage.setItem("bmi",bmi);
               
               var loseorgain = loseorgainmessage(document.bmiform.weight.value, document.bmiform.dreamweight.value);
               localStorage.setItem("loseorgain",loseorgain);
               
               var weightdifference = myweightdifference(document.bmiform.weight.value, document.bmiform.dreamweight.value);
               localStorage.setItem("weightdifference",weightdifference);
               
               var bmrrate = bmr(document.bmiform.gender.value, document.bmiform.height.value, document.bmiform.weight.value, document.bmiform.age.value);
               localStorage.setItem("bmrrate",bmrrate);
                              
               document.bmiform.submit();
               }           		  
               </script>
        </head>
    
    
    
    
        <body>    
              <div data-role="page" id="bmicalculator">
    
              <div data-role="header">
              <a href="#" onclick="home()" class="ui-btn ui-icon-home ui-btn-icon-left">Home</a>
              <h1>BMI Calculator</h1>             
              </div>           
        
              <div data-role="main" class="ui-content">       
              Enter your height and weight. The system will calculate your BMI:<br><br>
              <form id="bmiform" name="bmiform" action="calculateinput.html">
        
              <label for="height">Height</label>
              <input type="text" name="height" id="height" value="enter height in meters">
        
              <label for="weight">Weight</label>
              <input type="text" name="weight" id="weight" value="enter weight in KG">
        
              <fieldset data-role="controlgroup" data-type="horizontal">
        
              <legend>Gender</legend>
              <label for="male">Male</label>
              <input type="radio" name="gender" id="male" value="male" checked>

              <label for="female">Female</label>
              <input type="radio" name="gender" id="female" value="female">
        
              </fieldset>
        
              <label for="dreamweight">Dream Weight</label>
              <input type="text" name="dreamweight" id="dreamweight" value="enter dream weight in KG">
        
              <label for="age">Age</label>
              <input type="text" name="age" id="age" value="enter age">
        
              <label for="exercisefrequency">Exercise Frequency</label>
              <select name="exercisefrequency" id="exercisefrequency">
              <option value="hardlyexercise">Hardly Exercise</option>
              <option value="exercise1to3timesaweek">Exercise 1 to 3 times a week</option>
              <option value="exercise3to5timesaweek">Exercise 3 to 5 times a week</option>
              <option value="exercise6to7timesaweek">Exercise 6 to 7 times a week</option>
              <option value="intensiveexercisemorethan7timesaweek">Intensive Exercise more than 7 times a week</option>
              </select><br>
        
              <input type="button" value="Calculate" onclick="calculate()">
        
              </form>
        
              </div>
  
        
              <div data-role="footer" style="text-align:center;">     
              Developed by The Dom    
              </div>    
                                
              <script type="text/javascript" src="cordova.js"></script>
              <script type="text/javascript" src="js/index.js"></script>
            
              </div>
       </body>
</html>

【问题讨论】:

  • = 是赋值,== 是比较,=== 是严格比较
  • 如果您在遇到错误放置 === 的问题时,您也可以使用 yoda conditions 表示 "male" == gender(相反的条件......而不是 @987654327 @) 如果您尝试使用单个 =,则会产生错误。但我强烈建议您检查它并学习使其始终正确作为例行程序的一部分。帮助:始终考虑是否值得使用=====。三元组表示严格并且还会检查像 if (false === 'false') 这样的实例,它会忽略内部块,因为第二个是字符串而不是布尔值。
  • 我建议不要使用 yoda 条件,而是使用合适的 IDE,它会在 if 语句的赋值中抛出错误。

标签: javascript if-statement conditional


【解决方案1】:

使用“==”而不是“=”进行比较。 '=' 用于将 thr rhs 变量分配给 lhs 变量,'==' 用于比较。

【讨论】:

【解决方案2】:

您在 if 语句中使用了赋值而不是相等性检查。

替换:

if (gender="male"){
else if(gender="female"){

与:

if (gender==="male"){
else if(gender==="female"){

【讨论】:

  • 我已将 = 替换为 === 和 ==。这两个更改都给了我一个未定义的变量错误。无论如何,我曾经做过一些 PHP,我想这就是为什么我习惯使用单个 = 而不是 == 和 === 或比较。一个严重的错误!
  • "Your BMR is: undefined"出现在calculateinput.html中
  • 这意味着bmr 返回undefined,或者该值未正确设置到存储或从中获取。
  • 我仍在分析我的代码以解决未定义的错误。又到了调试时间。
  • 是的,无论如何感谢你们提醒我 =、== 和 === 之间的区别!这对我很有用,因为我正在开发的这个应用程序需要大量的 if else 语句。接下来我只专注于解决未定义的错误!
猜你喜欢
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 2015-08-13
  • 2014-03-04
相关资源
最近更新 更多