`void 0`是什么意思? [重复]

问题描述 投票:0回答:3

阅读 Backbone.js 源代码,我看到了这个:

validObj[attr] = void 0;

什么是

void 0
?这里使用它的目的是什么?

javascript
3个回答
1187
投票

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 之外的任何地方),它将全局对象的

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
,以减少发送到浏览器的字节数。


128
投票

void 0
返回未定义且不能被覆盖,而
undefined
可以被覆盖。

var undefined = "HAHA";

42
投票

void
是 JavaScript 的保留关键字。它计算表达式并始终返回
undefined

© www.soinside.com 2019 - 2024. All rights reserved.