Void (0) возвращает `undefined`, но разрешает доступ к свойствам. Зачем?
Итак void
возвращает undefined
после выполнения переданного ему выражения. undefined
генерирует исключения при попытке доступа к его свойствам. Так почему же void(0).prop
возвращает undefined
вместо сбоя?
alert("void(0) => " + void(0)); // undefined
// How is it that this doesn't throw an exception?
alert("void(0).someprop => " + void(0).someprop); // undefined
// Exception, can't access property of undefined.
alert("undefined.someprop => " + undefined.someprop); // crash
http://jsfiddle.net/bFhLS/
Ответы
Ответ 1
Оператор void
не использует сама скобка. Таким образом, утверждение, вероятно, анализируется как:
void( (0).someprop )
И доступ к someprop
из Number
. Вместо того, чтобы:
(void (0)).someprop
Как вы, вероятно, ожидали, что вызывает ошибку.
Ответ 2
void
является оператором, это НЕ функция.
void(0)
эквивалентно "void 0"
.
Итак, void(0).someprop
эквивалентно void 0..someprop
.
Чтобы доказать,
void(undefined).someprop
выдает ошибку, так как она будет оцениваться как (someprop
не существует в undefined
точно)
void undefined.someprop