Какая разница между undefined и void 0?
undefined
void 0
Что предпочтительнее и почему?
Разница в том, что некоторые браузеры позволяют перезаписывать значение undefined. Однако void(anything) всегда возвращает реальное undefined.
void(anything)
undefined = 1; console.log(!!undefined); //true console.log(!!void(0)); //false
undefined имеет нормальную семантику переменных, которую даже строгий режим не может исправить , и требует поиска во время выполнения. Это может быть затенено как любая другая переменная, и глобальная переменная по умолчанию undefined не доступна только для чтения в ES3.
void 0 - это пуленепробиваемая константа времени компиляции для undefined без требований поиска. это как запись null или true вместо поиска значения переменной. Это работает из коробки без каких-либо аргументов безопасности и короче, чтобы написать. Это лучше во всех отношениях.
null
true
JS очень плохо разбирается в синтаксисе, здесь круглые скобки являются необязательными, void 0 и void(0) эквивалентны.
void(0)
Для второго вопроса вам нужно использовать undefined напрямую, избегая ненужной оценки операнда для извлечениято же самое значение undefined.
Подробнее в ссылке: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/void
Используйте undefined. Это более известный, чем void(0).