Диалоги браузера: alert, prompt, confirm

данные≈ 6 минут

Здесь будет встроен видео-разбор темы (5–7 минут, YouTube / RuTube / VK Видео) — тем, кто лучше воспринимает на слух, текст ниже не обязателен.

Скрипт умеет не только вычислять — ему часто нужно поговорить с человеком. Для этого у браузера есть три встроенных окна: alert сообщает, prompt спрашивает, confirm предлагает выбор.

Разделы темы:·

Иногда скрипту нужно что-то сказать человеку прямо сейчас. Для этого есть функция alert: она выводит окно с сообщением и кнопкой «ОК» — и не отпускает, пока пользователь его не закроет.

js
Tab добавляет отступ. Чтобы выйти из редактора, нажмите Escape — фокус перейдёт на кнопку запуска.

Передать можно не только строку — любое значение. Перед показом alert сам превратит его в текст.

js
Tab добавляет отступ. Чтобы выйти из редактора, нажмите Escape — фокус перейдёт на кнопку запуска.

Функция prompt не просто сообщает — она спрашивает. Вызов выглядит так: prompt(вопрос, значениеПоУмолчанию). Второй аргумент необязателен: если он есть, текст сразу появится в поле ввода. Пользователь видит окно с полем и двумя кнопками — «ОК» и «Отмена».

Действие пользователяЧто вернёт prompt
Ввёл 42 и нажал «ОК»строка "42"
Ничего не ввёл и нажал «ОК»пустая строка ""
Нажал «Отмена» или Escnull

Главная ловушка: даже если в поле ввели цифры, вернётся строка. JavaScript не угадывает, что вы имели в виду число, — преобразовывать тип придётся самим.

js
Tab добавляет отступ. Чтобы выйти из редактора, нажмите Escape — фокус перейдёт на кнопку запуска.

prompt отвечает строкой. Всегда. Даже про числа.

Третья функция задаёт вопрос, на который есть ровно два ответа. confirm(вопрос) показывает окно с кнопками «ОК» и «Отмена» и возвращает true либо false — готовое булево значение, которое удобно сразу подставить в условие.

js
Tab добавляет отступ. Чтобы выйти из редактора, нажмите Escape — фокус перейдёт на кнопку запуска.

Классическое применение — переспросить перед необратимым действием: удалением, отправкой формы, выходом без сохранения. Одна строка кода вместо целой формы с кнопками.

У всех трёх окон есть общее свойство — модальность. Пока окно открыто, страница замирает: нельзя нажать кнопку, выделить текст, прокрутить содержимое. Замирает и сам скрипт — он стоит на строке с вызовом и ждёт ответа.

js
Tab добавляет отступ. Чтобы выйти из редактора, нажмите Escape — фокус перейдёт на кнопку запуска.
разбор вывода
Все три строки появляются разом: песочница учебника не умеет показывать модальные окна и заменяет 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.