Объясните пожалуйста специфику конструкции
Прошу помочь с пониманием следующего момента:
Необходимо чтобы появлялось окно prompt до тех пор пока не будет введен один из вариантов верного текста. Если будет только одно условие, то сработает корректно. Пример:
do {
var a = prompt("Ввод текста");
} while (a != "текст");
Когда будет введен "текст" цикл закончит выполнение. Но необходимо несколько условий, пишу так:
do {
var a = prompt("Ввод текста");
} while (a != "текст" || a != "текст2");
Цикл получается бесконечным. Опытным путем заменил оператор или на и:
do {
var a = prompt("Ввод текста");
} while (a != "текст" && a != "текст2");
Начало срабатывать, но немогу понять почему? |
do {
var a = prompt("Ввод текста");
} while (a != "текст" || a != "текст2");
Если в переменной a будет значение 'текст' — оператор ИЛИ "пойдет" направо и увидит там "текст2". Соответственно условие будет верным. |
Думал над этим около двух часов. Стоило зарегистрироваться и создать тему на форуме как понимание резко пришло, посмотрел на это немного под другим углом: while будет выполнять до тех пор пока выражение в скобках = true, а при или оно получается таковым всегда.
Да, спасибо, пока набирал свое сообщение вы уже ответили. |
Aleks123,
это вообще замечательный способ) Как только у меня какая-то проблема с которой долго туплю, я открываю so и начинаю писать туда вопрос, большинство вопросов отпадают сразу или через 5 минут после того как кнопку "отправить" жмешь. Метод утенка называется. |
Не обязательно циклить, рекурсии должно хватить
function GuessText(p,a){
if(a!="foo" && a!="bar" && a!="baz"){
a=prompt(p||"Ввод текста",a||"");
return GuessText("Введите правильный текст",a);
}
else
return a;
}
var some=GuessText();
some;
/*
bar
*/
|
| Часовой пояс GMT +3, время: 21:47. |