В чем смысл оператора void в JavaScript?
-
21-08-2019 - |
Вопрос
Я видел, как некоторые люди использовали 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.