‘void 0’是什么意思?

IT技术 javascript backbone.js
2021-01-11 06:48:34

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

validObj[attr] = void 0;

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

3个回答

什么void 0意思?

void[MDN]是一个前缀关键字,它接受一个参数并始终返回undefined.

例子

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

这样做有什么意义?

看起来很没用,不是吗?如果它总是返回undefined,那么只使用undefined它自己有什么问题?

在一个完美的世界中,我们将能够安全地使用undefined:它比void 0. 但如果您以前从未注意到,这并不是一个完美的世界,尤其是在 Javascript 方面。

using 的问题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始终返回undefinedundefined,另一方面,可以是 Javascript 先生决定他想要的任何东西。

为什么void 0,特别是?

为什么要使用void 0有什么特别的0我们不能同样轻松地使用1, or 42, or 1000000or"Hello, world!"吗?

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

为什么这仍然相关?

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

有趣的是,当前版本的 Chrome 和 Firefox 并没有!:)
2021-03-16 06:48:34
但为什么它需要一个参数?任何使表达式无效的有用示例?为什么无效0?而不是无效1?
2021-03-17 06:48:34
另一种常见模式是undefined在立即函数中作为参数提供(function(undefined){ ... }())这对缩小特别有用。
2021-03-23 06:48:34
所以这与if (typeof options.something === 'undefined')我之前从 SO 中记住的基本相同,作为检查未定义的安全模式?
2021-04-04 06:48:34
@Sam 不是真的,void x总是返回未定义。typeof x === "undefined"检查是否x未定义。
2021-04-08 06:48:34

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

var undefined = "HAHA";
ECMAScript 5 将 undefined 定义为只读
2021-03-20 06:48:34
哇,我一直在反对这个。3 年前发布时,浏览器允许您将 undefined 设置为任何值。
2021-03-20 06:48:34
@epascarello,尽管您在那里写的内容是正确的(不知何故),但我认为它并没有回答(足够清楚)询问这意味着什么的问题。
2021-03-30 06:48:34
如果一个答案随着时间的推移变得多余,为什么不应该反对它以支持更新的答案?
2021-04-08 06:48:34
@licancabur:我相信这只是在严格模式代码中,是吗?
2021-04-11 06:48:34

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

它可能比 短undefined,并且也保证返回它(与全局 overwriteable 不同undefined)。
2021-03-31 06:48:34