2017-06-04 12 views
0

Wenn = für die TDEE Calculation-Steuerungsflussvergleichsoperatoren verwendet wird, stoppt der Ablauf bei if (activityLevel = 'sedentary'). Wenn ich == verwende, funktioniert es wie erwartet. Ich bin seit 2 Stunden dabei und habe über 3 Dokumentationen gelesen, aber ich kann es nicht herausfinden.Zeichenfolge, die der Zeichenfolge entspricht Steuerfluss

Ich weiß == wird für den gleichen Wert und Bedeutung verwendet und === wird für den gleichen Wert und Typ verwendet, aber ich glaube nicht, dass das nichts damit zu tun hat. Für einen Moment dachte ich vielleicht = wird für den Typ verwendet, in diesem Fall, wenn activityLevel gleich eine Zeichenfolge ist, aber ich bin mir ziemlich sicher, dass es nicht auch nicht, wie ich nicht in Dokumentationen für = stolperte.


Hinweis: Die kommentierten Zahlen in dem TDEE Steuerfluss sind, was die Ergebnisse sollten sein, nicht das, was sie sind.

// REE Calculation 
// Males - 10 x weight (kg) + 6.25 x height (cm) – 5 x age (y) + 5 = REE 
// Females - 10 x weight (kg) + 6.25 x height (cm) – 5 x age (y) – 161 = REE 

const gender = 'male'; // prompt('Are you male or female?'); 
const weight = 100; // prompt('How much do you weigh in KG?'); 
const height = 185; // prompt('What is your height in cm?'); 
const age = 23; // prompt('What is your age'); 

if (sex = 'male') { 
    stepOne = 10 * weight; 
    stepTwo = 6.25 * height; 
    stepThree = 5 * age + 5; 
    var ree = stepOne + stepTwo - stepThree; 
} 

if (sex = 'f') { 
    stepOne = 10 * weight; 
    stepTwo = 6.25 * height; 
    stepThree = 5 * age - 161; 
    var ree = stepOne + stepTwo - stepThree; 
} 

console.log(ree.toFixed(0)) // Answer is correct - 2171 

// TDEE Calculation 

var activityLevel = 'moderate activity' // prompt('What is your activity level?\nsedentary/light activity/moderate activity/very active'); 

if (activityLevel = 'sedentary') { 
    var tdee = ree * 1.2; // 2642.40 
} else if (activityLevel = 'light activity') { 
     var tdee = ree * 1.375; // 3027.75 
    } else if (activityLevel = 'moderate activity') { 
      var tdee = ree * 1.55; // 3413.10 
     } else { // 3798.45 
       var tdee = ree * 1.725; 
      } 

console.log(tdee.toFixed(0)) 
+0

sex = 'f' bewertet Sex nicht, es weist ihm den Wert 'f' zu. Ändere es zu Sex === 'f' – user2182349

Antwort

1

Wenn Sie die Art von etwas bekommen möchten, können Sie den typeof Operator verwenden. Wenn Sie den Zuweisungsoperator (=) in Ihrer if-Anweisung verwenden, übergibt er immer die Bedingung. Wenn Sie die Gleichheit überprüfen möchten, sollten Sie die Operatoren == oder === verwenden.

zum Beispiel, wenn Sie das Aktivitätsniveau überprüfen möchten, können Sie dies durch:

var activityLevel = 'moderate activity'; 
if (activityLevel === 'moderate activity'){ 
    console.log("Moderate Activity"); 
} 

This ist ein gutes Dokument über die verschiedenen Betreiber in JS.


Update: Auch habe gerade bemerkt, dass die Variable sex nicht definiert ist. Sie haben gender am Anfang definiert, aber Sie überprüfen gegen die Variable sex.

+0

Das hat funktioniert, danke. Ich werde gelesen haben! – Ibrahim

+1

"* es wird immer die Bedingung passieren *" In den meisten Fällen, aber nicht immer immer. Es wird die Bedingung basierend auf dem zugewiesenen Wert bestehen/nicht bestehen. Wenn Sie beispielsweise 'if (i = 0) 'verwenden, wird die Bedingung nicht erfüllt, weil' 0 '* falsy * ist. –

+0

@ JonathanLonowski ist richtig! deshalb setze ich den Stern immer auf :) –

Verwandte Themen