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/

Ответы

Ответ 2

void является оператором, это НЕ функция.

void(0) эквивалентно "void 0".

Итак, void(0).someprop эквивалентно void 0..someprop.

Чтобы доказать,

void(undefined).someprop 

выдает ошибку, так как она будет оцениваться как (someprop не существует в undefined точно)

void undefined.someprop