阅读backbone.js源代码,我看到了:
validObj[attr] = void 0;
什么是void 0
?
答案
什么是void 0
意思是?
void
^[MDN]^是一个前缀关键字,它需要一个参数并始终返回undefined
。
Examples
void 0
void (0)
void "hello"
void (new Date())
//all will return undefined
这有什么意义?
似乎没用,不是吗?如果总是返回undefined
,仅使用什么问题undefined
本身?
在一个完美的世界中,我们可以安全地使用undefined
: 比上面的更简单易懂void 0
。但是,如果您以前从未注意到,这不是一个完美的世界,尤其是在JavaScript方面。
使用的问题undefined
是undefined
不是一个保留的单词(它实际上是全局对象的属性^[wtfjs]^)。那是,undefined
是允许的变量名称,因此您可以在您自己的caprice上为其分配一个新值。
alert(undefined); //alerts "undefined"
var undefined = "new value";
alert(undefined) // alerts "new value"
注意:在任何支持ecmascript 5或更新的环境中,这不再是一个问题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
短而惯用。
为什么这仍然相关?
虽然undefined
通常可以在现代JavaScript环境中受到信任,这是一个微不足道的优势void 0
:更短。差异不足以担心编写代码时,但它可以在大多数代码sinifiers替换的大型代码库中加起来足够多undefined
和void 0
减少发送到浏览器的字节数。