Void: примеры (JAVASCRIPT)

Использование оператора void в JavaScript
Раздел: Языковые конструкции, Операторы
void(expression: any): undefined

Основные сведения

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

Основной синтаксис: void выражение

Этот оператор находит применение в нескольких специфических случаях:

  • Создание гиперссылок, которые выполняют JavaScript-код, но не переходят по новому адресу или не обновляют страницу. Часто использовался с атрибутом href тега <a>.
  • Немедленный вызов функциональных выражений (IIFE) в контекстах, где необходимо гарантировать, что результат вызова будет undefined.
  • Явное указание на то, что результат работы выражения намеренно игнорируется.

Оператор принимает только один аргумент — любое валидное выражение JavaScript. Он всегда возвращает примитивное значение undefined.

Базовые примеры

Простое использование для получения undefined:

let result = void 0;
console.log(result);
undefined

Использование с выражением:

let x = 5;
console.log(void (x + 10));
undefined

Использование в атрибуте href (устаревший, но наглядный пример):

<a href="javascript:void(0);" onclick="alert('Клик!')">
  Ссылка, которая никуда не ведет
</a>

В этом случае нажатие на ссылку вызовет alert, но браузер не перейдет по новому адресу.

Похожие средства в JavaScript

Оператор запятой (,): Позволяет выполнить несколько выражений, возвращая результат последнего. В отличие от void, он возвращает значение последнего выражения, а не undefined.

let a = (console.log('Привет'), 42);
console.log(a);
Привет
42

Метод undefined: Можно напрямую присвоить переменной значение undefined. Однако void полезен, когда нужно гарантированно получить undefined даже если выражение может вернуть другое значение по умолчанию.

Игнорирование возвращаемого значения: Часто проще просто вызвать функцию, не присваивая результат переменной, если он не нужен. void может сделать такое намерение более явным в коде.

Аналоги в других языках программирования

Python: В Python нет прямого аналога. Для игнорирования возвращаемого значения результат просто не присваивается. Для создания "ничего не делающей" ссылки используются другие методы.

def do_something():
    return "результат"

_ = do_something()  # Результат игнорируется
# Ничего не выводится, значение теряется

PHP: Оператор void был введен в PHP 7.1. Он используется только в объявлениях возвращаемых типов, указывая, что функция не возвращает значение.

function logMessage(string $msg): void {
    echo $msg;
    // return не используется или используется без значения
}

C / C++: Тип void используется для указания, что функция не возвращает значение. Это аналог указания типа возвращаемого значения, а не оператор.

void print_hello() {
    printf("Hello\n");
}

MySQL: Не имеет прямого аналога оператору void JavaScript.

Распространенные ошибки

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

let value = void (5 + 3);
if (value === 8) { // Это условие никогда не выполнится
    console.log('Это не будет выведено');
}
console.log(value === undefined);
true

Некорректное использование с современными обработчиками событий: Использование javascript:void(0) в атрибуте href для отмены перехода — устаревшая практика. Предпочтительнее использовать event.preventDefault() в обработчике события или кнопку (<button>).

<!-- Устаревший способ -->
<a href="javascript:void(0)" id="oldLink">Ссылка</a>

<!-- Современный способ -->
<a href="#" id="newLink">Ссылка</a>
<script>
    document.getElementById('newLink').addEventListener('click', function(e) {
        e.preventDefault();
        console.log('Клик!');
    });
</script>

История изменений

Оператор void присутствует в JavaScript с самых ранних версий (ECAScript 1). Его поведение оставалось неизменным на протяжении всех спецификаций языка. Главное изменение связано не с самим оператором, а с контекстом его использования. Паттерн javascript:void(0) в атрибутах href был широко распространен в эпоху раннего веба, но в современной разработке на первое место вышли другие методы обработки событий, что сделало этот оператор менее употребительным.

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

Использование с IIFE для модулей: Иногда используется для немедленного вызова функции, чтобы гарантировать, что возвращаемое значение не будет случайно присвоено.

Пример javascript
void function initApp() {
    const config = { version: '1.0' };
    console.log('Приложение инициализировано', config);
}();

// Попытка получить результат вызова функции приведет к undefined
let app = void function(){ return 'test'; }();
console.log(app);
Приложение инициализировано {version: '1.0'}
undefined

Гарантированное возвращение undefined в стрелочных функциях: Может использоваться для написания лаконичных стрелочных функций, где тело — одно выражение, но возвращать нужно именно undefined.

Пример javascript
const sideEffect = () => void console.log('Выполнено!');
let output = sideEffect();
console.log('Результат функции:', output);
Выполнено!
Результат функции: undefined

Использование с операторами, которые имеют значение: Полезно, когда нужно использовать результат выражения как значение, но при этом убедиться, что итоговый результат — undefined.

Пример javascript
let counter = 0;
const incrementAndLog = () => void ++counter;
console.log(incrementAndLog());
console.log('Счетчик:', counter);
undefined
Счетчик: 1

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

Пример javascript
// Внутри некоторых библиотек
(function(window, undefined) {
    // Локальная переменная undefined может быть переопределена,
    // но void 0 всегда дает истинное undefined
    var isUndefined = function(obj) {
        return obj === void 0;
    };
    // ... остальной код
})(window);

JS void function comments

En
Void Evaluates an expression and returns undefined.