void(0)返回`undefined`,但允许属性访问。为什么?

时间:2013-09-12 20:45:03

标签: javascript

因此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 个答案:

答案 0 :(得分:16)

void operator不使用括号本身。因此,该语句可能被解析为:

void( (0).someprop )

someprop访问Number。而不是:

(void (0)).someprop

正如您可能期待的那样,这会引发错误。

答案 1 :(得分:1)

void运算符 NOT 是一个函数。

void(0)相当于"void 0"

因此void(0).someprop相当于void 0..someprop

要证明,

void(undefined).someprop 

会抛出错误,因为它会被评估为somepropundefined肯定不存在

void undefined.someprop