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 для модулей: Иногда используется для немедленного вызова функции, чтобы гарантировать, что возвращаемое значение не будет случайно присвоено.
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.
const sideEffect = () => void console.log('Выполнено!');
let output = sideEffect();
console.log('Результат функции:', output);Выполнено! Результат функции: undefined
Использование с операторами, которые имеют значение: Полезно, когда нужно использовать результат выражения как значение, но при этом убедиться, что итоговый результат — undefined.
let counter = 0;
const incrementAndLog = () => void ++counter;
console.log(incrementAndLog());
console.log('Счетчик:', counter);undefined Счетчик: 1
Обход минимизаторов: Некоторые минимизаторы кода могут преобразовывать undefined в переменную. Использование void 0 всегда гарантирует получение примитивного значения undefined, что иногда используется в библиотеках для надежности.
// Внутри некоторых библиотек
(function(window, undefined) {
// Локальная переменная undefined может быть переопределена,
// но void 0 всегда дает истинное undefined
var isUndefined = function(obj) {
return obj === void 0;
};
// ... остальной код
})(window);