What does `void 0` mean?
Possible Duplicate:
What does “javascript:void(0)” mean?
Reading through the Backbone.js source code, I saw this:
validObj[attr] = void 0;
What is void 0 ? What is the purpose of using it here?
What does void 0 mean?
void [MDN] is a prefix keyword that takes one argument and always returns undefined .
Examples
void 0
void (0)
void "hello"
void (new Date())
//all will return undefined
What's the point of that?
It seems pretty useless, doesn't it? If it always returns undefined , what's wrong with just using undefined itself?
In a perfect world we would be able to safely just use undefined : it's much simpler and easier to understand than void 0 . But in case you've never noticed before, this isn't a perfect world, especially when it comes to Javascript.
The problem with using undefined was that undefined is not a reserved word (it is actually a property of the global object [wtfjs]). That is, undefined is a permissible variable name, so you could assign a new value to it at your own caprice.
alert(undefined); //alerts "undefined"
var undefined = "new value";
alert(undefined) // alerts "new value"
Note: This is no longer a problem in any environment that supports ECMAScript 5 or newer (ie in practice everywhere but IE 8), which defines the undefined property of the global object as read-only (so it is only possible to shadow the variable in your own local scope). However, this information is still useful for backwards-compatibility purposes.
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 , on the other hand, cannot be overidden. void 0 will always return undefined . undefined , on the other hand, can be whatever Mr. Javascript decides he wants it to be.
Why void 0 , specifically?
Why should we use void 0 ? What's so special about 0 ? Couldn't we just as easily use 1 , or 42 , or 1000000 or "Hello, world!" ?
And the answer is, yes, we could, and it would work just as well. The only benefit of passing in 0 instead of some other argument is that 0 is short and idiomatic.
Why is this still relevant?
Although undefined can generally be trusted in modern JavaScript environments, there is one trivial advantage of void 0 : it's shorter. The difference is not enough to worry about when writing code but it can add up enough over large code bases that most code minifiers replace undefined with void 0 to reduce the number of bytes sent to the browser.
void 0返回undefined,不可覆盖, undefined可被覆盖。
var undefined = "HAHA";
void is a reserved JavaScript keyword. It evaluates the expression and always returns undefined .
上一篇: 什么是最低有效的JSON?
下一篇: 'void 0'是什么意思?
