Диалоги браузера: alert, prompt, confirm
Здесь будет встроен видео-разбор темы (5–7 минут, YouTube / RuTube / VK Видео) — тем, кто лучше воспринимает на слух, текст ниже не обязателен.
Скрипт умеет не только вычислять — ему часто нужно поговорить с человеком. Для этого у браузера есть три встроенных окна: alert сообщает, prompt спрашивает, confirm предлагает выбор.
Иногда скрипту нужно что-то сказать человеку прямо сейчас. Для этого есть функция alert: она выводит окно с сообщением и кнопкой «ОК» — и не отпускает, пока пользователь его не закроет.
Передать можно не только строку — любое значение. Перед показом alert сам превратит его в текст.
Функция prompt не просто сообщает — она спрашивает. Вызов выглядит так: prompt(вопрос, значениеПоУмолчанию). Второй аргумент необязателен: если он есть, текст сразу появится в поле ввода. Пользователь видит окно с полем и двумя кнопками — «ОК» и «Отмена».
| Действие пользователя | Что вернёт prompt |
|---|---|
Ввёл 42 и нажал «ОК» | строка "42" |
| Ничего не ввёл и нажал «ОК» | пустая строка "" |
Нажал «Отмена» или Esc | null |
Главная ловушка: даже если в поле ввели цифры, вернётся строка. JavaScript не угадывает, что вы имели в виду число, — преобразовывать тип придётся самим.
prompt отвечает строкой. Всегда. Даже про числа.
Третья функция задаёт вопрос, на который есть ровно два ответа. confirm(вопрос) показывает окно с кнопками «ОК» и «Отмена» и возвращает true либо false — готовое булево значение, которое удобно сразу подставить в условие.
Классическое применение — переспросить перед необратимым действием: удалением, отправкой формы, выходом без сохранения. Одна строка кода вместо целой формы с кнопками.
У всех трёх окон есть общее свойство — модальность. Пока окно открыто, страница замирает: нельзя нажать кнопку, выделить текст, прокрутить содержимое. Замирает и сам скрипт — он стоит на строке с вызовом и ждёт ответа.
alert обычной записью в вывод. Чтобы почувствовать настоящую паузу, откройте консоль браузера на любой странице и выполните тот же код там.Это одновременно сила и слабость. Сила — сообщение гарантированно увидят, и скрипт получит ответ до того, как пойдёт дальше. Слабость — пользователя останавливают силой, поэтому злоупотреблять такими окнами не стоит.
Внешний вид этих окон определяет браузер и операционная система, а не разработчик. Нельзя поменять шрифт, цвет, положение на экране или надписи на кнопках — окно будет выглядеть так, как решили в Chrome, Firefox или Safari.
Поэтому в настоящих интерфейсах диалоги обычно рисуют сами — аккуратные окна из HTML и CSS. Но у встроенной троицы есть неоспоримый плюс: одна строка кода — и диалог готов. Для обучения, прототипов и отладки это идеальный инструмент.
Никакой магии: собственная модалка — это обычный HTML-элемент, наложенный поверх страницы и оформленный через CSS. JavaScript показывает и прячет его по клику. Как это устроено, разберём в главах про работу с документом — а пока встроенных окон более чем достаточно.
alert(текст)показывает сообщение и ждёт нажатия «ОК» — ничего не возвращает.prompt(вопрос, поУмолчанию)возвращает введённый текст, а при отмене —null.- Ответ
prompt— всегда строка: перед вычислениями преобразуйте её, например черезNumber(). confirm(вопрос)возвращаетtrueпри «ОК» иfalseпри «Отмена» или Esc.- Все три окна модальные: скрипт и страница ждут, а внешний вид окон настроить нельзя.
1/3Пользователь ввёл 25 в окно prompt("Ваш возраст?") и нажал «ОК». Что вернётся?
2/3Что вернёт prompt("Ваш город?"), если пользователь нажал «Отмена»?
3/3Пользователь нажал Esc в окне confirm("Продолжить?"). Что вернётся?
Приветствие по имени
Спросите имя пользователя через prompt и поприветствуйте его через alert. Если человек нажал «Отмена», покажите «Привет, незнакомец!».
Сохраняем ответ: const userName = prompt("Как вас зовут?", ""); — и проверяем его: alert(userName === null ? "Привет, незнакомец!" : "Привет, " + userName + "!"); При отмене prompt возвращает null, поэтому сравниваем именно с ним.
Калькулятор из двух окон
Спросите у пользователя два числа двумя вызовами prompt и покажите их сумму через alert. Подсказка: вспомните, какого типа ответ у prompt.
Ответы обязательно преобразуем в числа: alert(Number(prompt("Первое число?")) + Number(prompt("Второе число?"))); Без Number() плюс склеит строки: для «2» и «3» получилось бы «23», а не 5.