通过Backbone.js源代码阅读,我看到了:
validObj[attr] = void 0;
什么是void 0
?在这里使用它的目的是什么?
答案 0 :(得分:928)
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
不是保留字(it is actually a property of the global object [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
简短且惯用。
虽然现代JavaScript环境中通常可以信任undefined
,但void 0
有一个微不足道的优点:它更短。差异不足以担心编写代码时,但它可以在大型代码库上添加足够的代码,大多数代码缩减器将undefined
替换为void 0
以减少发送到浏览器的字节数。
答案 1 :(得分:98)
void 0
返回undefined,并且在undefined
被覆盖时无法覆盖。
var undefined = "HAHA";
答案 2 :(得分:28)
void
是一个保留的JavaScript关键字。它评估表达式并始终返回undefined
。