#javascript #while
Есть две переменные, в которые записываются данные: let finance = +prompt('Ваш бюджет?'); while (finance === "" || isNaN(finance) || finance === null) { let finance = prompt('Ваш бюджет?'); } let name = prompt('Название вашего магазина?'); while (name == "" || name == null) { let name = prompt('Название вашего магазина?'); } При вводе в первую переменную все записывается без проблем. Во вторую тоже, но если при вводе во вторую переменную сначала нажать "Отмена" или "Ок" и потом ввести без ошибок, то она зацикливается и скрипт не идет дальше, хотя первая переменная работает нормально. В чем проблема?
Ответы
Ответ 1
Проблема в лишнем let. Так как с использованием этого ключевого слова область видимости ограничена блоком, а не функцией - значение введенное внутри цикла никак не совпадает с тем, что проверяется в условии. Почему не зацикливается в первом случае? Так как используется унарный оператор + - результат prompt сразу приводится к числу. Приведение к числу работает согласно таблице в которой отмечено, что в случае null результатом будет +0, пустая строка, либо строка только из пробелов будет приведена к 0. Поэтому при нажатии отмены или вводе пустой строки ни одно из условий не выполняется. Стоит отметить, что при вводе строки, которую невозможно привести к числу в первом случае так же будет зацикливание, так как результат приведения в этом случае будет NaN.
Комментариев нет:
Отправить комментарий