Что значит void 0?

293
08 января 2018, 12:11

Иногда вижу такие ссылки

<a href="javascript:void(0)">Войти</a>

и void 0 тоже используется в библиотеке Backbone.js, например:

if (obj == null) return void 0;

Что значит void 0, и для чего оно нужно?

Answer 1

Оператор void[MDN][спецификация] вычисляет переданное выражение и всегда возвращает undefined.

Примеры:

void 0          // возвращает undefined
void(0)         // это тоже возвращает undefined
void "привет"   // тоже возвращает undefined
void new Date() // всегда возвращает undefined

Зачем этот оператор вообще нужен?

Если void 0 всегда возвращает undefined, можно просто использовать undefined, разве нет?

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

  • В старых браузерах (я не уверен в каких именно. По-моему, в IE 6 и ниже и в Netscape) была возможность изменить значение undefined:

    undefined = 5;   // в старых браузерах изменит значение undefined,
                     // в новых ничего не делает
    5 === undefined; // true в старых браузерах, false в новых
    

    Не всегда известно, что undefined значит undefined. Поэтому некоторые библиотеки используют void 0.

  • Даже в новых браузерах undefined - допустимое имя переменной внутри функции:

    function f() {
      var undefined = 5;
      return undefined;
    }
    f(); // возвращает 5
    

    Но если вы пишете такой код, это ваша вина.

  • Если хотите сохранить свою энергию: void 0 на три символа короче undefined. Хотя 0[0] еще короче.

Ссылка, начинающаяся с javascript:, обычно отправляет пользователя на страницу с текстом, который код возвращает. Например:

Нажимай <a href="javascript: 'Привет!'">СЮДА</a>!

Но если вы хотите, чтобы ссылка никуда не отправляла пользователя, надо как-то вернуть undefined. Традиционно люди используют void(0), но undefined и другие варианты тоже работают.

<a href="javascript:void(0)">Войти</a>

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

Это только традиция; void 0 - простой и короткий код. Другие варианты, такие как void 9 и void "привет", тоже работают.

READ ALSO
Изменяется константа в ReactJS + HashRouter

Изменяется константа в ReactJS + HashRouter

Есть файл с компонентом, который участвует в головном файле с маршрутами RouterВ файле есть импорт константы, которая является двумерным массивом:

287
Лайки и избранное

Лайки и избранное

Во вью у меня такой блок:

363
Всплывающее окно в Visual Code

Всплывающее окно в Visual Code

При написании метода после того как ставлю скобки вылезает такое большое окно (это не окно подсказок, потому что если писать код дальше будет...

283
Сокращение js скриптов

Сокращение js скриптов

На сайте к странице подключается около 15 js скриптов и 10 css файлов, будет ли профит если свести весь js и css в один файл, те

248