Страницы

Поиск по вопросам

вторник, 31 марта 2020 г.

Зацикливание while при вводе строки через prompt

#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.

Комментариев нет:

Отправить комментарий