阅读Backbone.js的源代码,我看到了这个:
validObj[attr] = void 0;
什么是void 0?在这里使用它的目的是什么?
阅读Backbone.js的源代码,我看到了这个:
validObj[attr] = void 0;
什么是void 0?在这里使用它的目的是什么?
当前回答
void是一个保留的JavaScript关键字。它计算表达式并总是返回undefined。
其他回答
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不是一个保留字(它实际上是全局对象[wtfjs]的一个属性)。也就是说,undefined是一个允许的变量名,因此您可以根据自己的意愿为它赋一个新值。
alert(undefined); //alerts "undefined"
var undefined = "new value";
alert(undefined) // alerts "new value"
注意:这在任何支持ECMAScript 5或更新版本的环境中都不再是一个问题(即在实际中,除了IE 8),它将全局对象的未定义属性定义为只读(因此只可能在自己的局部作用域中隐藏变量)。但是,这些信息对于向后兼容仍然很有用。
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 0将总是返回undefined。另一方面,undefined可以是Javascript先生想要的任何东西。
为什么要void 0呢?
为什么我们要用void 0?0有什么特别之处?难道我们不能简单地使用1、42、1000000或“你好,世界!”?
答案是,是的,我们可以,而且效果也一样。传入0而不是传入其他参数的唯一好处是0是简短而习惯的。
为什么这仍然有意义?
尽管在现代JavaScript环境中通常可以信任undefined,但void 0有一个微不足道的优点:它更短。在编写代码时,这种差异并不足以让人担心,但它可以在很大的代码库中累积起来,以至于大多数代码缩小器将未定义替换为void 0,以减少发送到浏览器的字节数。
void是一个保留的JavaScript关键字。它计算表达式并总是返回undefined。
Void 0返回undefined,不能被覆盖,而undefined可以被覆盖。
var undefined = "HAHA";