Что означает `void 0`?

Возможный дубликат:
Что означает "javascript: void (0)" означает?

Чтение через исходный код Backbone.js, я увидел это:

validObj[attr] = void 0;

Что такое void 0? Какова цель его использования здесь?

Ответ 1

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

void [MDN] является ключевым словом префикса, который принимает один аргумент и всегда возвращает undefined.

<сильные > Примеры

void 0
void (0)
void "hello"
void (new Date())
//all will return undefined

В чем смысл этого?

Кажется, это бесполезно, не так ли? Если он всегда возвращает undefined, что неправильно при использовании самого undefined?

В идеальном мире мы сможем безопасно использовать undefined: это намного проще и понятнее, чем void 0. Но в случае, если вы никогда не замечали этого раньше, это не идеальный мир, особенно когда речь заходит о Javascript.

Проблема с использованием undefined заключалась в том, что undefined не является зарезервированным словом ( оно фактически является свойством глобального объекта [wtfjs ]). То есть undefined является допустимым именем переменной, поэтому вы можете назначить новое значение для своего собственного каприза.

alert(undefined); //alerts "undefined"
var undefined = "new value";
alert(undefined) // alerts "new value"

Примечание. Это уже не проблема в любой среде, поддерживающей ECMAScript 5 или новее (т.е. практически везде, но IE 8), которая определяет свойство undefined глобального объекта как доступное только для чтения (так что это только возможно затенять переменную в вашей локальной области). Однако эта информация по-прежнему полезна для целей обратной совместимости.

alert(window.hasOwnProperty('undefined')); // alerts "true"
alert(window.undefined); // alerts "undefined"
alert(undefined === window.undefined); // alerts "true"
var undefined = "new value";
alert(undefined); // alerts "new value"
alert(undefined === window.undefined); // alerts "false"

void, с другой стороны, нельзя переоценить. void 0 всегда будет возвращать undefined. undefined, с другой стороны, может быть тем, что г-н. Javascript решает, что он хочет.

Почему void 0, в частности?

Почему мы должны использовать void 0? Что такого особенного в 0? Не могли бы мы так же легко использовать 1, или 42, или 1000000 или "Hello, world!"?

И ответ: да, мы могли бы, и это сработало бы так же хорошо. Единственное преимущество передачи в 0 вместо некоторого другого аргумента состоит в том, что 0 является коротким и идиоматическим.

Почему это все еще актуально?

Хотя undefined обычно можно доверять в современных средах JavaScript, существует одно тривиальное преимущество void 0: оно короче. Разницы не достаточно, чтобы беспокоиться о написании кода, но он может складываться достаточно над большими кодовыми базами, большинство кода minifiers заменить undefined на void 0, чтобы уменьшить количество байт, отправленных в браузер.

Ответ 2

void 0 возвращает undefined и не может быть перезаписана, а undefined может быть перезаписана.

var undefined = "HAHA";

Ответ 3

void - зарезервированное ключевое слово JavaScript. Он оценивает выражение и всегда возвращает undefined.