
JavaScript
Как сделать проверку через бесконечный цикл?
Как сделать проверку значения, которое вводится в prompt через бесконечный цикл while(true)?

let age;
while (true) {
age = prompt('...', '');
if (age == '' || isNaN(age = +age)) {
alert('Ошибка');
} else {
break;
}
}
Виталик Комаров
что значит эта строчка? age = +age
Решил что задача скучна. Вот ООП пример с защитой основных методов.
// модуль
const Age = function () {
let
successCallback = null,
failCallback = null;
this.question = 'why age?';
this.successMessage = 'good age';
this.failMessage = 'bad age';
this.min = 18;
this.max = Number.POSITIVE_INFINITY;
let prevAge = null;
const success = (callback) => {
if (typeof callback !== 'function')
throw new Error('subscription error \'success\'');
successCallback = callback;
};
const fail = (callback) => {
if (typeof callback !== 'function')
throw new Error('subscription error \'fail\'');
failCallback = callback;
};
const check = () => {
while (true) {
prevAge = prompt(this.question);
if (prevAge === null) {
break;
}
const repeatQuestion = (
!!failCallback?.()
&& (
isNaN(prevAge)
|| +prevAge < this.min
|| +prevAge > this.max
)
);
if (repeatQuestion) {
alert(this.failMessage);
continue;
}
successCallback?.();
alert(this.successMessage);
break;
}
};
Object.defineProperties(this, {
'prevAge': {
'get': () => +prevAge ? +prevAge : 0,
'set': a => prevAge = a,
},
'success': {
'get': function () {
return success;
}
},
'fail': {
'get': function () {
return fail;
},
},
'check': {
'get': function () {
return check;
},
},
});
};
// экземпляр
const age = new Age();
age.min = 16;
age.success(() => {
age.successMessage = 'У Вас идеальный возраст!';
});
age.fail(() => {
age.failMessage = `Только что указали возраст ${age.prevAge} Вам минимум должно быть ${age.min}`;
// разрешаю повторно спросить возраст
return true;
});
age.check();
Basant Singh
Вот теперь все.
const check = () => {
while (true) {
prevAge = prompt(this.question);
const resetBool = !!failCallback?.();
if (prevAge === null || resetBool) {
break;
}
const repeatQuestion = (
isNaN(prevAge)
|| +prevAge < this.min
|| +prevAge > this.max
);
if (repeatQuestion) {
alert(this.failMessage);
continue;
}
successCallback?.();
alert(this.successMessage);
break;
}
};
Похожие вопросы
- Зачем нужны Циклы в JavaScript? Бесконечный цикл который не делает ничего.
- Как сделать проверку пустоты массива в Java Script .
- Javascript как сделать так, чтобы два рандомных числа в одном цикле не повтрялись
- Проблема с решением задачи (циклы)
- Для чего практически нужен цикл в языках программирования javascript, php ?
- Сравниваю циклы while и for и хочу понять разницу между ними. Они выполняют условно одно и тоже. Это вся разница?
- Когда использовать цикл for, а когда while?
- Почему цикл while не останавливается когда i=0 ?
- Для чего нужен цикл for...of, если есть цикл for...in
- как создать цикл для margin?