it-swarm.cn

“void 0”是什么意思?

可能重复: /
“javascript:void(0)”是什么意思?

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

validObj[attr] = void 0;

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

455
Randomblue

void 0是什么意思?

voidname__[MDN] 是一个前缀关键字,它接受一个参数并始终返回undefinedname__。

示例

void 0
void (0)
void "hello"
void (new Date())
//all will return undefined

那是什么意思?

看起来很没用,不是吗?如果它总是返回undefinedname__,那么仅使用undefinedname__本身有什么问题?

在一个完美的世界中,我们可以安全地使用undefinedname__:它比void 0更简单,更容易理解。但万一你以前从未注意过,这不是一个完美的世界,尤其是涉及到Javascript时。

使用undefinedname__的问题是undefinedname__不是保留字( 它实际上是全局对象的属性 [wtfjs] )。也就是说,undefinedname__是一个允许的变量名,因此您可以根据自己的价格为其分配一个新值。

alert(undefined); //alerts "undefined"
var undefined = "new value";
alert(undefined) // alerts "new value"

注意:这在任何支持ECMAScript 5或更新版本的环境中都不再是问题(即实际上除了IE 8之外的所有环境),它将全局对象的undefinedname__属性定义为只读(因此它是只能在您自己的本地范围内隐藏变量。但是,此信息对于向后兼容性目的仍然有用。

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"

另一方面,voidname__不能被覆盖。 void 0always return undefinedname__。另一方面,undefinedname__可以是Javascript先生决定他想要的任何东西。

为什么void 0,特别是?

我们为什么要使用void 00有什么特别之处?难道我们不能轻易使用1421000000"Hello, world!"吗?

答案是,是的,我们可以,而且它也会起作用。传入0而不是其他一些参数的唯一好处是0很简短且惯用。

为什么这仍然相关?

虽然undefinedname__通常可以在现代JavaScript环境中受到信任,但void 0有一个微不足道的优点:它更短。在编写代码时,差异是不够的,但是它可以在大型代码库中添加足够的代码,大多数代码缩写器用void 0替换undefinedname__以减少发送到浏览器的字节数。

920
Peter Olson

void 0返回undefined,并且在undefined可被覆盖时无法覆盖。

var undefined = "HAHA";
97
epascarello

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

28
Digital Plane