Задать вопрос
@atumbochka

Почему не работает if в while-e?

HTML:
<body>
        <div id="test"></div>
        <div id="text"></div>
        <input type="text" id="input">
        <button id="button">OK</button>
        <script src="script.js"></script>
    </body>


let name = null;

const randomNumber = Math.floor(Math.random() * 100);

const button = document.getElementById("button");
const input = document.getElementById("input");
const text = document.getElementById("text");
const test = document.getElementById("test");

test.textContent = randomNumber;
text.textContent = "Введите имя";

button.onclick = function () {
    while (name === null) {
        if (input.value === "") {
            alert("Введите имя!");
            return;
        } else {
            text.textContent = "Здравствуйте, "+name+"! Вы играете в игру ''Угадай число''! Если вы будете говорить неправильный ответ, то я буду подсказывать вам! Удачи!";
            name = input.value;
            break;
        }
    }

    if (name !== null) {
        if (Number(input.value) === randomNumber) {
            text.textContent = "Вы победили!";
        } else {
            if (Number(input.value) > randomNumber) {
                text.textContent = "Моё число меньше!";
            } else {
                text.textContent = "Моё число больше!";
            }
        }
    }
}


Не могу понять, почему при вводе имени сразу же говорится "число больше"/"число меньше", хотя сперва должно выводиться "Привет, ...". В условии указано, что name === null и так и есть.
Также хотелось бы задать небольшой вопрос: как сделать, чтобы после ввода имени не выводилось "число больше"/"число меньше"? То есть алгоритм принимает введенное имя за попытку угадать число, мне нужно сделать чтобы функция как бы подождала один ввод перед выполнением следующего if-a.

Заранее спасибо!
  • Вопрос задан
  • 110 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Если код выполняется в глобальной области видимости, то переменная name уже присутствует в объекте window. Вызывая name = null, внутри на самом деле будет строка "null", и поэтому оно не проходит проверку в первом условии, и проходит во втором.

Поиграйтесь в консоли с window.name, увидите что там всегда строка, что бы вы не присвоили ей.

Рекомендую код обернуть в IIFE (если подходит), должно заработать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
18 дек. 2024, в 17:50
7000 руб./за проект
18 дек. 2024, в 17:26
5000 руб./за проект
18 дек. 2024, в 17:23
1500 руб./за проект