Подтвердить что ты не робот

В чем смысл оператора void в JavaScript?

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

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

4b9b3361

Ответ 1

JavaScript, оператор void, используется для явного возврата undefined. Это унарный оператор, означающий, что с ним может использоваться только один операнд. Вы можете использовать его, как показано ниже - отдельно или с круглыми скобками.

void expression;
void(expression);

Давайте посмотрим несколько примеров

void 0; //returns undefined
void(1); //returns undefined

void 'hello'; //undefined
void {}; //undefined
void []; //undefined

void myFunction(); 
void(myFunction());

Если вы спросите, зачем вам специальное ключевое слово, чтобы просто возвращать undefined вместо того, чтобы просто возвращать undefined: причина в том, что до ES5 вы могли фактически назвать глобальную переменную undefined, например: var undefined = "hello" или var undefined = 23, и большинство браузеров примет это; идентификатор undefined не обещал быть фактически неопределенным unde. Таким образом, чтобы вернуть фактическое неопределенное значение, был использован оператор void. Это не очень популярный оператор, и он редко используется.

Давайте посмотрим на пример функции с void,

//just a normal function
function test() {
  console.log('hello');
  return 2;
}

//lets call it
console.log(test()); //output is hello followed by 2

//now lets try with void
console.log(void test()); //output is hello followed by undefined

void отбрасывает возвращаемое значение из функции и явно возвращает undefined.

Вы можете прочитать больше из моего учебного поста: https://josephkhan.me/the-javascript-void-operator/

EC В ECMAScript 5 и более поздних версиях глобальная переменная undefined гарантированно не определена (ECMA-262, 5-е издание., § 15.1.1.3), хотя все еще возможно иметь переменную внутри внутреннего область действия будет названа undefined.

Ответ 2

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

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

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

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

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

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

[object Window]

Ответ 3

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

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

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

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

Следовательно, ваш вопрос.

Ответ 4

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

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

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

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