#javascript #function #if-statement
#javascript #функция #if-оператор
Вопрос:
Я очень новичок и сейчас практикую функции
Я сделал это, чтобы создать простой калькулятор оставшихся калорий, но я хотел спросить:
Когда я изначально создал значение, которое уже вычисляет разницу между, скажем, caloriesMen и caloriesToday и назвал его caloriesLeft (поэтому я буквально написал » пусть caloriesLeft = caloriesMen — caloriesToday«), но он придумал NaN, что несколько понятно.
Но когда я сделал это в alert (), он понял, чего я хотел (например, «У вас есть» (caloriesMen — caloriesToday) «калории, оставшиеся на сегодня!»)
-
Не могли бы вы сказать мне, почему это так?
-
Как бы вы сделали этот код (лучше / чище)?
Мой код и переменные:
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» во вводе калорий, ваша функция завершится сбоем.