Здравствуйте! Как зациклить prompt на проверку? Если ничего не введено или введена не цифра, prompt запрашивает снова

// Необходимо зациклить prompt на проверку numberOne, mathOperator, numberTwo следующим 
  образом: например ничего не ввели(prompt запрашивает ввода данных), ввели не число(prompt 
  запрашивает ввода числа) и т.д
  Учусь JS, ДЗ выполнил, код ниже, но хочу проверки на каждом этапе ввода данных, пробовал 
  через while, но не получается, видимо не правильно пишу код.... делаю цикл на проверку 
  ошибок const numberOne,выхожу из цикла, создаю константу const mathOperator и код 
  темнеет(((( VS код пишет что предполагалось другое.....




const numberOne = prompt('Ведите первое число');
const mathOperator = prompt('Введите математическое действие');
const numberTwo = prompt('Ведите второе число');


if (!numberOne) {
    console.log('Первое число не указано');

} else if (!numberTwo) {
    console.log('Второе число не указано');

} else if (!mathOperator) {
    console.log('Не введён знак');

} else if (!+numberOne || !+numberTwo) {
    console.log('Некорректный ввод чисел');

 } else if (mathOperator != '+' && mathOperator != '-' && mathOperator != '*' && mathOperator 
    !='/') {
    console.log('Программа не поддерживает такую операцию');
}

switch (mathOperator) {
    case '+': console.log(+numberOne + +numberTwo);
    break;
    case '-': console.log(numberOne - numberTwo);
    break;
    case '*': console.log(numberOne * numberTwo);
    break;
    case '/': console.log(numberOne / numberTwo);
    break;
    default: console.log('Учимся дальше)');
    }

Ответы (1 шт):

Автор решения: Rudi

Можно так.. eval() опасен не следует использовать в серьёзных проектах

let n1, n2, o;//Создаём переменные для двух чисел и оператора
const op = ['-','+','/','*','===','!==','==','!=']//разрешенные операторы

function getNum (t) {// функция принимает строку 
  t = t ? t : 'Введите первое число'//если строка передана аргументом присваивается значению t в противном случае присваивается дефолтная строка
  let n = n1 ? n2 = Number(prompt(t)) : n1 = Number(prompt(t));//Создается и получает значение переменная n с условием, если n1 уже имеет значение, тогда присваиваем значение из prompt переменной n2 и тоже значение будет присвоено n
  if(isNaN(n) || !n) return getNum ('Необходимо ввести число');//isNaN(n) если было введено не число, или prompt был без значения запускаем эту же функцию с аргументом в виде строки
  if(n1 && n2) return alert("Ответ: " + eval(n1+o+n2));//если n1 и n2 получили значение отправляем результат 
  return getOper();//После получения значения для переменной n1 запрашиваем матиматическое действие
}
function getOper (t) {
  t = t ? t : 'Введите математическое действие';
  o = prompt(t);
  if(!op.includes(o) || !o) return getOper('Необходимо ввести математическое действие')//проверяем разрешен ли оператор и получила ли значение переменная o если нет запрашиваем снова
  if(op.includes(o)) getNum ('Введите второе число');//если оператор разрешен запрашиваем второе число
}
getNum()

→ Ссылка