Новичок Javascript: оставшиеся калории

#javascript #function #if-statement

#javascript #функция #if-оператор

Вопрос:

Я очень новичок и сейчас практикую функции

Я сделал это, чтобы создать простой калькулятор оставшихся калорий, но я хотел спросить:

Когда я изначально создал значение, которое уже вычисляет разницу между, скажем, caloriesMen и caloriesToday и назвал его caloriesLeft (поэтому я буквально написал » пусть caloriesLeft = caloriesMen — caloriesToday«), но он придумал NaN, что несколько понятно.

Но когда я сделал это в alert (), он понял, чего я хотел (например, «У вас есть» (caloriesMen — caloriesToday) «калории, оставшиеся на сегодня!»)

  1. Не могли бы вы сказать мне, почему это так?

  2. Как бы вы сделали этот код (лучше / чище)?

Мой код и переменные:

 let gender;
let caloriesMen = 2500;
let caloriesWomen = 2000;
let caloriesToday;

function calCalc() {

gender = prompt('Are you man or woman?') 
    if (gender == 'man') {
        caloriesToday = prompt('How many calories have you already consumed today?');
        alert('You have '   (caloriesMen - caloriesToday)   ' calories left to consume today!');
    } else if (gender == 'woman') {
        caloriesToday = prompt('How many calories have you already consumed today?');
        alert('You have '   (caloriesWomen - caloriesToday)   ' calories left to consume today!');
    }
    
}

calCalc();
  

Спасибо!

Ответ №1:

Попробуйте определить caloriesToday как целое число, чтобы let caloriesToday = 0; в противном случае его значение было undefined таким, чтобы вы не могли вычесть его из другого числа

Ответ №2:

 let gender;
let caloriesMen = 2500;
let caloriesWomen = 2000;
let caloriesToday;
let caloriesLeft;
function calCalc() {

gender = prompt('Are you man or woman?') 
    if (gender == 'man') {
        caloriesToday = prompt('How many calories have you already consumed today?');
        caloriesLeft = caloriesMen - caloriesToday;
        alert('You have '   caloriesLeft   ' calories left to consume today!');
    } else if (gender == 'woman') {
        caloriesToday = prompt('How many calories have you already consumed today?');
        caloriesLeft = caloriesWomen - caloriesToday;
        alert('You have '   caloriesLeft   ' calories left to consume today!');
    }
    
}

calCalc();
  

Ответ №3:

Как сказал Бен Купе, вам необходимо инициализировать свои переменные, чтобы избежать undefined загрязнения значений всем, к чему они прикасаются.

«Более чистый код» — дело вкуса. Я бы лично избегал if / else с объектом с ключами для разных полов. Не используйте глобальные переменные, если в этом нет необходимости. Он отлично работает для определения ваших переменных внутри функции.

 function calCalc() {
    let gender = prompt('Are you man or woman?');
    let caloriesPerGender = {'man': 2500, 'woman': 2000};
    let caloriesToday = prompt('How many calories have you already consumed today?');
    alert('You have '   (caloriesPerGender[gender] - caloriesToday)   ' calories left to consume today!');
}

calCalc();
  

Вы, вероятно, захотите также проверить свои входные данные, если кто-то введет «monkey» в поле gender или «abc» во вводе калорий, ваша функция завершится сбоем.