Вопрос

Я видел, как некоторые люди использовали void оператор в их коде.Я также видел это в href атрибуты: javascript:void(0) что, кажется, ничуть не лучше, чем javascript:;

Итак, каково оправдание использования void оператор?

Это было полезно?

Решение

Объяснение его использования в ссылках:

Именно по этой причине букмарклеты часто оборачивают код внутри void() или анонимной функции, которая не возвращает ничего, что останавливало бы браузер от попыток отобразить результат выполнения букмарклета.Для примера:

javascript:void(window.open("dom_spy.html"))

Если вы напрямую используете код, который возвращает что-то (в данном случае экземпляр нового окна), браузер в конечном итоге отобразит это:

javascript:window.open("dom_spy.html");

В Firefox будет отображаться приведенное выше:

[object Window]

Другие советы

Тот Самый undefined значение не было доступно напрямую в JavaScript до версии ES1.3.

Оператор void <expression> поэтому был включен, чтобы разрешить доступ к этому значению.

Иногда это полезно, особенно при работе с Web API (напримеробработчики событий), чтобы гарантировать, что результат выражения непротиворечив undefined.

Когда undefined свойство было добавлено к глобальному объекту в ES1.3 утилита void стало неочевидным.

Отсюда и ваш вопрос.

Рассмотрим следующее:

<a href="javascript:void(fish=document.getElementById('foo').value);void(document.getElementById('bar').value=fish);">With Void</a>

<a href="javascript:fish=document.getElementById('foo').value;document.getElementById('bar').value=fish;">Without Void</a>

<input type="text" id="foo" value="one fish" />
<input type="text" id="bar" value="no fish" />

Первая ссылка поменяет местами значения текстовых полей.Вторая ссылка откроет новую страницу с текстом "одна рыба".Если вы используете javascript: link, в ту минуту , когда выражение возвращает что - то отличное от null или undefined, браузер будет интерпретировать это как то, что должна делать ссылка.Путем обертывания всех выражений / statments в void() таким образом, вы гарантируете, что весь ваш фрагмент кода будет выполнен.В наши дни это в основном используется в букмарклетах, так как использование onclick атрибут или настройка обработчиков событий в отдельных блоках / файлах Javascript является "нормой".

Что касается javascript: против. javascript:void(), первое утверждение неоднозначно.Вы говорите: "Эй, я хочу запустить какой-нибудь javascript", но при этом не предоставляете никакого кода.Не обязательно ясно, что здесь должен делать браузер.Со вторым утверждением вы говорите "эй, запустите какой-нибудь javascript", и ваш код в конечном итоге возвращает undefined, что, как известно браузеру, означает "ничего не делать".

Поскольку я здесь, я также отмечу, что использование либо javascript: или javascript:void(); попал в немилость к большинству людей, которые заботятся о разметке.Лучше всего, если ваш обработчик onclick вернет false и укажет ссылку на страницу / ресурс, которая имеет смысл для людей, у которых отключен javascript или которые используют блокировщик javascript, такой как NoScript.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top