Что означает "void 0"?
Возможный дубликат:
Что означает "javascript:void(0)"?
Читая исходный код Backbone.js, я увидел это:
validObj[attr] = void 0;
Что такое void 0
? Какова цель использования здесь?
3 ответа
Что значит 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
: это короче. При написании кода не нужно беспокоиться о разнице, но она может сложиться достаточно над большими базами кода, которые заменяет большинство минификаторов кода undefined
с void 0
уменьшить количество байтов, отправляемых в браузер.
void 0
возвращает неопределенное значение и не может быть перезаписано undefined
может быть перезаписано
var undefined = "HAHA";
void
является зарезервированным ключевым словом JavaScript. Он вычисляет выражение и всегда возвращает undefined
,