#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.
Комментариев нет:
Отправить комментарий