“void 0”是什么意思?

2022-08-29 22:59:23

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

validObj[attr] = void 0;

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


答案 1

这是什么意思?void 0

void[MDN] 是一个前缀关键字,它采用一个参数并始终返回 。undefined

例子

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

这有什么意义呢?

这似乎很没用,不是吗?如果它总是返回,那么仅使用自身有什么问题?undefinedundefined

在一个完美的世界里,我们将能够安全地使用:它比更简单,更容易理解。但是,如果您以前从未注意到,这不是一个完美的世界,尤其是在Javascript方面。undefinedvoid 0

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

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另一方面,不能被覆盖。 总是会回来。另一方面,可以是Javascript先生决定想要的任何东西。void 0undefinedundefined

为什么呢?void 0

我们为什么要使用?有什么特别之处?难道我们不能同样轻松地使用,或,或或?void 001421000000"Hello, world!"

答案是,是的,我们可以,而且效果也很好。传递而不是其他一些论点的唯一好处是简短和习语。00

为什么这仍然相关?

虽然在现代JavaScript环境中通常可以信任,但有一个微不足道的优点:它更短。在编写代码时,这种差异不足以担心,但它可以比大型代码库加起来足够多,大多数代码缩减器都可以替换,以减少发送到浏览器的字节数。undefinedvoid 0undefinedvoid 0


答案 2

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

var undefined = "HAHA";