backbone.js “void 0”是什么意思?[duplicate]

pbwdgjma  于 2022-11-24  发布在  其他
关注(0)|答案(3)|浏览(143)

此问题在此处已有答案

What does "javascript:void(0)" mean?(14个答案)
两年前就关门了。
在阅读Backbone.js源代码时,我看到了以下内容:

validObj[attr] = void 0;

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

uurity8g

uurity8g1#

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不是保留字(it is actually a property of the global object [wtfjs]),也就是说,undefined是一个允许的变量名,因此您可以随意为其赋值。

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

注意:在任何支持ECMAScript 5或更新版本的环境中(即除了IE 8之外的任何地方),这不再是一个问题,ECMAScript 5或更新版本将全局对象的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 00有什么特别之处?我们就不能简单地使用1421000000"Hello, world!"吗?
答案是,是的,我们可以这样做,而且它也同样有效。传入0而不是其他参数的唯一好处是0简短而符合习惯。

为什么这仍然相关?

尽管undefined在现代JavaScript环境中通常是可信的,但void 0有一个微不足道的优点:在编写代码时,这种差异并不足以让人担心,但在大型代码库中,这种差异可能会累积到足够多的程度,以至于大多数代码小型化器会将undefined替换为void 0,以减少发送到浏览器的字节数。

wqsoz72f

wqsoz72f2#

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

var undefined = "HAHA";
ckocjqey

ckocjqey3#

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

相关问题