Какой смысл оператора void в JavaScript? - PullRequest
51 голосов
/ 20 марта 2009

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

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

Ответы [ 3 ]

50 голосов
/ 20 марта 2009

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

Это причина, по которой букмарклеты часто оборачивать код внутри void () или анонимная функция, которая не вернуть что-нибудь, чтобы остановить браузер от попытки отобразить результат выполнение букмарклета. За Пример:

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

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

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

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

[object Window]
16 голосов
/ 07 июля 2017

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

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

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

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

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

12 голосов
/ 20 марта 2009

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

<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, браузер интерпретирует это как то, что должна делать ссылка. Оборачивая все выражения / оценки в функцию void(), вы обеспечиваете выполнение всего своего фрагмента кода. В наши дни это в основном используется в Bookmarklets, поскольку использование атрибута onclick или установка обработчиков событий в отдельных блоках / файлах Javascript - это «норма».

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

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

...