← Назад к вопросам

Что такое void 0?

2.0 Middle🔥 131 комментариев
#Другое

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое void 0 в JavaScript?

void 0 — это выражение в JavaScript, которое всегда возвращает значение undefined. Давайте разберём его детально, так как этот вопрос часто задают на собеседованиях для проверки понимания тонкостей языка.

Как работает void?

Оператор void вычисляет переданное ему выражение и затем возвращает undefined, независимо от результата вычисления. Например:

void 0;          // возвращает undefined
void (1 + 2);    // возвращает undefined, хотя выражение равно 3
void "hello";    // возвращает undefined
void console.log("test"); // выведет "test" в консоль, но возвратит undefined

Ключевая особенность: void "аннулирует" результат любого выражения, оставляя только undefined.

Почему именно 0?

  • 0 — это просто короткое, безопасное и быстро вычисляемое выражение. Исторически использовали void 0, потому что это минимальный синтаксис.
  • Можно использовать любое значение (void 1, void null и т.д.), но 0 стало общепринятым соглашением в сообществе разработчиков.

Зачем это нужно?

Основные причины использования void 0 вместо прямого написания undefined:

  1. Безопасность в старых браузерах (до ES5). В ранних версиях JavaScript глобальная переменная undefined не была защищена от перезаписи. Её можно было изменить:
undefined = "опасность!";
var test = undefined; // теперь test равно "опасность!", а не undefined

В таком контексте void 0 гарантированно возвращало настоящий undefined.

  1. Минификация кода. В минификаторах и сборщиках (например, UglifyJS) void 0 часто короче, чем undefined (5 символов против 9), что экономит место в финальном бандле.

  2. Стилистические предпочтения. Некоторые разработчики используют void 0 для явного указания намерения: "мне нужно именно значение undefined, а не результат выражения".

  3. Использование в bookmarklets и href. В атрибуте href тега <a> можно использовать javascript:void(0), чтобы предотвратить переход по ссылке:

<a href="javascript:void(0);" onclick="alert('Клик!')">Нажми меня</a>

Это останавливает действие по умолчанию (навигацию), позволяя выполнить JavaScript.

Современное применение

С появлением ES5 переменная undefined стала non-writable в глобальной области видимости:

undefined = "попытка"; // В строгом режиме вызовет ошибку, в нестрогом — игнорируется
console.log(undefined); // Выведет undefined (значение не изменилось)

Поэтому сегодня прямой риск перезаписи undefined минимален. Однако void 0 всё ещё встречается:

  • В сгенерированном коде транспайлеров (например, Babel) для гарантии совместимости.
  • В библиотеках и фреймворках, где важна поддержка очень старых сред.
  • Как идиома для получения undefined в функциях, где это значение нужно явно вернуть.

Примеры на практике

// Сравнение поведения
const originalUndefined = undefined;
const fromVoid = void 0;

console.log(originalUndefined === fromVoid); // true
console.log(typeof void 0); // "undefined"

// Использование в стрелочной функции для возврата undefined
const noop = () => void 0;
console.log(noop()); // undefined

// Защита от возможных побочных эффектов (редкий случай)
const getValue = (condition) => condition ? "data" : void 0;

Резюме: void 0 — это исторически сложившаяся идиома для надежного получения undefined. В современном JavaScript её актуальность снизилась, но понимание этого выражения показывает глубокое знание языка, его эволюции и особенностей. На собеседовании стоит подчеркнуть, что сегодня предпочтительнее использовать явное undefined, если не требуется поддержка архаичных окружений или специфических случаев минификации.