阅读Backbone.js源代码,我看到了:
validObj[attr] = void 0;
什么是void 0
?在这里使用它的目的是什么?
最佳答案
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
短且惯用。
为什么这仍然相关?
虽然 undefined
在现代 JavaScript 环境中通常可以被信任,但 void 0
有一个微不足道的优势:它更短。编写代码时不必担心这种差异,但它可以在大型代码库上加起来足够多,以至于大多数代码压缩器将 undefined
替换为 void 0
以减少字节数发送到浏览器。
关于javascript - `void 0` 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7452341/