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

Есть ли void в JavaScript?

1.0 Junior🔥 151 комментариев
#JavaScript Core

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

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

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

Есть ли void в JavaScript?

Да, void существует в JavaScript, но его поведение и применение сильно отличаются от других языков программирования (C++, Java, TypeScript).

Что такое void в JavaScript

void — это оператор (не тип данных), который вычисляет выражение и всегда возвращает undefined. Это одна из немногих действительно старых операторов в JavaScript, которая редко используется.

// void всегда возвращает undefined
const result = void 0;
console.log(result); // undefined

const x = void (2 + 2);
console.log(x); // undefined (выражение 2+2 было вычислено, но результат проигнорирован)

const y = void console.log('Привет');
console.log(y); // undefined
// Но консоль покажет: "Привет"

Синтаксис void

void expression

Оператор void выполняет выражение (для побочных эффектов), но отбрасывает результат и возвращает undefined.

Примеры использования

1. Безопасная замена undefined

// Вместо использования undefined, которое может быть переписано
let result = void 0;

// Это используется в старом коде для защиты от редакции undefined
// (в старых версиях JS undefined можно было переписать)
if (myVar === void 0) {
  console.log('myVar не определён');
}

2. Href в ссылках

<!-- BAD: попытка использовать JavaScript в href -->
<a href="javascript:void(0)" onclick="handleClick()">Нажми меня</a>

<!-- Это предотвращает переход по ссылке -->

Это типичный паттерн в старом коде, хотя сейчас лучше использовать preventDefault().

3. Возврат undefined в стрелочных функциях

// Если нужна функция без тела, которая явно возвращает undefined
const logger = (msg) => void console.log(msg);
logger('Логируем'); // Функция выполняет логирование и возвращает undefined

// Более явно чем
const logger2 = (msg) => {
  console.log(msg);
  // неявно возвращает undefined
};

4. В выражениях для отбрасывания значения

// Когда нужно выполнить выражение, но игнорировать результат
function processData(data) {
  void data.validate(); // Игнорируем возвращаемое значение
  return data.transform();
}

Void в TypeScript

В TypeScript void — это тип, обозначающий функцию, которая ничего не возвращает:

// Функция с типом void
function logMessage(msg: string): void {
  console.log(msg);
  // не возвращает значение
}

// Функция, которая что-то возвращает
function getValue(): number {
  return 42;
}

// Переменная типа void
const x: void = undefined; // OK
const y: void = null;      // ошибка (в strict mode)

// Функция, принимающая callback без возврата
function execute(callback: () => void) {
  callback(); // callback может вернуть что угодно, void игнорирует
}

const fn: () => void = () => {
  return 42; // это OK! void игнорирует возврат
};

const result = fn(); // result имеет тип void

Различие между void и undefined

// JavaScript
const a = void 0;
console.log(a === undefined); // true
console.log(typeof a); // "undefined"

// TypeScript
function fn1(): void {}
function fn2(): undefined {}

// Оба могут вернуть undefined, но семантически разные
const x: void = undefined; // OK
const y: undefined = undefined; // OK

// void означает "нам не важен результат"
// undefined означает "явно возвращаем undefined"

Реальные примеры использования

1. В React для обработки событий

// Старый способ
function handleClick() {
  // какая-то логика
}

<button onClick={handleClick}>Click</button>

// С void для явного указания, что функция ничего не возвращает
const handleSubmit = (e: React.FormEvent): void => {
  e.preventDefault();
  submitForm();
};

2. При работе с Promise

// Когда нам не нужен результат Promise
function setupListener() {
  void someAsyncOperation(); // запустили, но не ждём результата
}

// Более явно чем просто
function setupListener2() {
  someAsyncOperation(); // это работает, но linter может жаловаться
}

// TypeScript может требовать
const handler: () => void = async () => {
  void await fetchData();
};

3. В Object.assign

// Когда результат Object.assign не используется
const newObj = {};
void Object.assign(newObj, { a: 1, b: 2 });
// Хотя обычно пишут:
Object.assign(newObj, { a: 1, b: 2 });

Современное использование

В современном коде void используется редко:

// СТАРО: в старых браузерах для защиты undefined
var x = void 0;

// СТАРО: в href
<a href="javascript:void(0)">Ссылка</a>

// СОВРЕМЕННО: в TypeScript для типизации
function handler(): void {
  // ...
}

// СОВРЕМЕННО: в linting-правилах для явного игнорирования результата
void someAsyncCall();

Проблемы и когда использовать

// Если функция должна ничего не возвращать, используй type void
function onlyLogs(msg): void {
  console.log(msg);
}

// Если нужно явно игнорировать результат Promise (ESLint требует)
void somethingAsync();

// Не используй void для
// - замены undefined (просто используй undefined)
// - в href (используй preventDefault вместо этого)
// - просто так для стиля

Заключение

void в JavaScript:

  • Это оператор, который возвращает undefined
  • Редко используется в чистом JavaScript
  • В TypeScript это тип, означающий функция не возвращает значение
  • Современное применение — в типизации функций и явном игнорировании результатов

Большинство разработчиков редко встречают void в повседневной работе, кроме TypeScript типизации.