Объясните пожалуйста специфику конструкции
Прошу помочь с пониманием следующего момента:
Необходимо чтобы появлялось окно 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, время: 05:08. |