JavaScript

Как сделать проверку через бесконечный цикл?

Как сделать проверку значения, которое вводится в prompt через бесконечный цикл while(true)?
 let age;
while (true) {
age = prompt('...', '');
if (age == '' || isNaN(age = +age)) {
alert('Ошибка');
} else {
break;
}
}
Данил Герасичев
Данил Герасичев
63 194
Лучший ответ
Виталик Комаров что значит эта строчка? 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();
BS
Basant Singh
1 948
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;
}
};