Что значит javascript:void(0) и зачем это использовать в ссылках?
Что такое javascript:void(0) и как это работает
Давайте разберёмся по порядку. Конструкция javascript:void(0) состоит из двух частей:
javascript:— это псевдо-протокол (какhttp:илиftp:). Когда браузер видит такой href, он вместо перехода по URL выполняет JavaScript-код, который идёт после двоеточия.void(0)— это операторvoid, который вычисляет выражение в скобках и всегда возвращаетundefined.0— просто самое короткое выражение, можно было написатьvoid(1)илиvoid('hello')— результат тот же.
Зачем это нужно? Когда пользователь кликает по ссылке, браузер пытается перейти по URL из href. Если там обычная страница — происходит переход. Если там javascript: — выполняется код. Но после выполнения кода браузер смотрит на результат. Если результат — строка, он пытается открыть её как новую страницу (это плохо). А если результат — undefined, браузер ничего не делает. void(0) гарантирует, что вернётся именно undefined.
Пример для понимания
Сравните три варианта:
<!-- Вариант 1: без void — плохо -->
<a href="javascript:alert('Привет')">Кликни</a>
<!-- После alert браузер попытается открыть undefined как страницу — ничего страшного, но некрасиво -->
<!-- Вариант 2: с void — правильно -->
<a href="javascript:void(alert('Привет'))">Кликни</a>
<!-- void гарантирует, что после alert вернётся undefined, и страница не изменится -->
<!-- Вариант 3: современный способ -->
<a href="#" onclick="event.preventDefault(); alert('Привет')">Кликни</a>
<!-- event.preventDefault() отменяет стандартное поведение ссылки -->
Почему это устарело
В современной разработке javascript:void(0) считается плохой практикой по нескольким причинам:
- Нарушает принцип прогрессивного улучшения — если у пользователя отключён JavaScript, ссылка просто ничего не делает (вместо того чтобы вести на реальную страницу-заглушку).
- Плохо для SEO и доступности — скринридеры и поисковые боты не понимают такие ссылки.
- Усложняет отладку — в консоли разработчика такие ссылки выглядят как "javascript:void(0)", что неинформативно.
Современные альтернативы
Лучше использовать <button> для действий (открыть модалку, отправить форму) или обычные ссылки с event.preventDefault():
<!-- Для действий используйте button -->
<button onclick="myFunction()">Нажми меня</button>
<!-- Если очень нужно именно ссылка (например, стилизация) -->
<a href="#" onclick="event.preventDefault(); myFunction()">Нажми меня</a>
<!-- Идеальный вариант: ссылка с реальным fallback -->
<a href="/help/page" onclick="event.preventDefault(); openModal()">Открыть справку</a>
<!-- Если JS выключен, пользователь перейдёт на страницу /help/page -->
Таким образом, javascript:void(0) — это исторический костыль, который решал проблему "ссылка не должна никуда вести". Сегодня от него лучше отказаться в пользу более современных и доступных подходов.
Альтернативный взгляд: когда void всё ещё полезен
Несмотря на то, что javascript:void(0) в ссылках устарел, сам оператор void в JavaScript всё ещё используется в некоторых ситуациях:
- В bookmarklet'ах — это маленькие скрипты, которые сохраняются как закладки браузера. Там конструкция
javascript:void(...)по-прежнему стандарт, потому что закладка должна выполнить код и не перезагрузить страницу. - Для получения
undefined— в старом коде (до ES5) можно было переопределить глобальноеundefined, поэтому использовалиvoid 0как надёжный способ получить "настоящий" undefined. - В стрелочных функциях — если нужно выполнить действие, но вернуть
undefined(например, в цепочке промисов):promise.then(() => void doSomething())— это гарантирует, что возвращаемое значение не будет использовано случайно.
Но в повседневной разработке веб-страниц лучше использовать <button> или event.preventDefault(). Оператор void — это редкий гость в современном коде, и его основное применение сейчас — это именно bookmarklet'ы и специфические случаи работы с undefined.
Ответов пока нет.
Войдите чтобы оставить ответ