#javascript #if-statement #numbers
#javascript #оператор if #числа
Вопрос:
Я пытаюсь увидеть, равен ли пользовательский ввод числу, и если это не так, то покажите метку с надписью «Должно быть число» и не продолжайте, пока это не произойдет. Я никогда не узнавал о том, как проверить, равна ли строка числу, поэтому я искал его и добавил в свой код, но он по-прежнему не работает. Может кто-нибудь взглянуть на это и сказать мне, как я могу исправить свое if-условие? Заранее спасибо!
//variable that is used
var user_answer = getNumber("answer_input");
//Confirm your answer with clicking the button
onEvent("attackBttnForEquation", "click", function( ) {
if (isNaN("user_answer") === false){ //here is where I tried to use it, but it just skips the condition
showElement("mustBeNum_label");
setTimeout(function(){
hideElement("mustBeNum_label");
}, 1000);
}
setScreen("play_screen");
hideElement("fight_symbol");
checkAnswer();
checkLose();
});
Это то, что я пробовал на основе комментария, и это все равно не сработало:
onEvent("attackBttnForEquation", "click", function( ) {
if (isNaN(user_answer) === true){ //I forgot to specify that user_answer is a variable, but I even set the condition to equal to true and it did the same thing as before.
showElement("mustBeNum_label");
setTimeout(function(){
hideElement("mustBeNum_label");
}, 1000);
}
Хорошо, с полученным мной ответом отображается «mustBeNum_label», НО когда пользователь вводит фактическое число, он все равно показывает «mustBeNum_label».
//Confirm your answer with clicking the button
onEvent("attackBttnForEquation", "click", function( ) {
if (Number(user_answer)){
setScreen("play_screen");
hideElement("fight_symbol");
checkAnswer();
checkLose();
} else {
showElement("mustBeNum_label");
setTimeout(function(){
hideElement("mustBeNum_label");
}, 1000);
}
});
Комментарии:
1. строка «user_answer» не является числом (NaN), поэтому она true, а не false
Ответ №1:
Попробуйте проверить следующим образом:
if (Number(user_answer) || user_answer == 0) {
// input is a number
} else {
// input is not a number
}
Вы можете узнать больше здесь: Number — MDN
Комментарии:
1. Спасибо за ответ, «mustBeNum_label» показывает, когда это не число. Но когда пользователь вводит фактическое число, оно все равно показывает метку.
2. Поместите консоль. войдите в оператор if и else, проверьте, что срабатывает, а что нет. В качестве альтернативы, распечатайте пользовательский ввод перед передачей его в Number()
Ответ №2:
Я бы счел это плохим случаем Number()
, поскольку он будет выводить NaN
or a number
.
Подумайте, когда вы столкнетесь 0
: условие будет запускать ваш блок else, поскольку 0
оно является ложным.
Number.isInteger(Number(user_input))
может быть лучшим решением, поскольку оно всегда будет выводить логическое значение, и если оно будет передано NaN
, будет выводить false.
Более короткий синтаксис будет Number.isInteger( user_input)
Комментарии:
1. Я согласен, что мое решение не будет работать должным образом, когда пользователь вводит 0. И ваш подход кажется здесь более подходящим. Однако
Number.isInteger()
не будет работать для нецелых чисел. И вNaN
выводе нет ничего плохого, поскольку он считается ложным. ИМХО, добавления еще одной проверки на ноль должно быть достаточно.2. Я перешел
к параметру,
Number.isInteger
чтобы принудительно преобразовывать любые числа в строки в числа, просто чтобы учесть эту возможность.