Зачем и как?


Небольшая заметка как и зачем может использоваться ключевое слово void в JavaScript. Слово void — это оператор в JavaScript. Этот оператор позволяет вставлять выражения при этом всегда возвращает undefined.

Void для IIEFE

IIFE (Immediately-invoked function expression) — самовызывающаяся функция. Обычно такие функции описываются так:

(function(arg){ expression })(arg)
!function(arg){ expression } (arg)
+function(arg){ expression } (arg)

Но так же можно описывать IIFE функции используя void:

void function(arg){ expression } (arg)

Преимущества данной записи в идиоматичности. Есть еще теория, что компилятор такой код обрабатывает быстрее, но это не точно.

Void для истинного Undefined

В JS есть специальный тип undefined, который так же записывается, как и называется и при этом не является ключевым словом. Поэтому undefined можно переопределить и подменить. Зачем это можно сделать — другой вопрос. Но если писать void вместо undefined, то это банально позволяет делать запись немного короче и добавлять идиоматичности, позволяя наполнять смыслом “пустоту”. Вы можете описывать любое выражение после void:

var foo = void 0;
let bar = void null;
let buz = void 'Комментарий, описывающий что это и зачем. Удобно';

Void и Arrow functions

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

$(_=>void( ...somedo... ))
// хотя проще тогда писать так $(_=>{ ...somedo... })

Это не лучший пример, но он отражает суть.

Void для автоматического очищения временной переменной

Задачка: поменять местами значения переменных. В отличие от чисел, со строками не так много вариантов. Допустим меняем с использованием временной переменной, но мы хотим, чтобы в итоге она была очищена. Можем использовать void для этих целей:

var a = 'abc';
var b = 'cde';
var c = void(c = a, a = b, b = c)
console.log(a, b, c);
// a = 'cde'
// b = 'abc'
// c = undefined

Головоломки с void

Ну и небольшой вопрос с подвохом. Что будет и почему? 🙂

var x = void 'foo' + '!!!';