JavaScript`undefined`vs`void 0`

JavaScript`undefined`vs`void 0`,javascript,undefined,void,Javascript,Undefined,Void,未定义和无效0之间的区别到底是什么 首选哪一种以及原因?使用未定义的。它比void(0)更为常见,此处的括号是可选的,void 0,void(0)和void(0)是等效的。void是一个一元运算符,具有从右到左的关联性,因此该值位于其右侧: void 对于第二个问题,您需要直接使用undefined,同时避免不必要的操作数求值来检索相同的undefined值 参考资料中的更多信息:不同之处在于某些浏览器允许您覆盖未定义的值。但是,void anything始终返回未定义的实值 未定义,需要运行时

未定义
无效0
之间的区别到底是什么


首选哪一种以及原因?

使用
未定义的
。它比
void(0)
更为常见,此处的括号是可选的,
void 0
void(0)
void(0)
是等效的。
void
是一个一元运算符,具有从右到左的关联性,因此该值位于其右侧:

void

对于第二个问题,您需要直接使用
undefined
,同时避免不必要的操作数求值来检索相同的
undefined


参考资料中的更多信息:

不同之处在于某些浏览器允许您覆盖
未定义的值。但是,
void anything
始终返回未定义的实值

未定义
,需要运行时查找。它可以被遮蔽 与任何其他变量一样,默认全局变量
undefined
在ES3中不是只读的

void 0
实际上是
未定义的
的编译时防弹常量,无需查找要求。它是
例如写入
null
true
,而不是查找变量值。它是开箱即用的,没有任何安全参数,而且写起来更短。它在各方面都更好。

仅在未压缩的代码中更短;如果您使用了,您可以将
undefined
缩小为类似
a
,而
void 0
不可缩小:)@gustavohenke但是gzip呢?如果缩小,您可能会在
未定义的
的不同闭包中得到所有不同的字母,如
a
b
c
。其中as
void 0
void 0
的任意位置。无论如何,这种技术肯定会混淆已经优化了
未定义
(FF,Chrome,但不是IE10)的JIT,因为它是一个全局常量,甚至静态分析都可以看到它是否被隐藏。这样,您就可以将它转换为普通变量查找,并且它肯定不是编译时常量。当然,这可能无关紧要,但这不是论点:P@gustavohenke请参见
void 0
undefined
被识别为编译时常量,但将其保存到变量中是完全不同的。我不认为括号是可选的,因为“JS在语法上非常松散”,但是因为
void
是一个运算符而不是一个函数。“您需要直接使用
undefined
,同时避免不必要的操作数求值来检索相同的
undefined
值。”–这甚至意味着什么?这实际上不是真的
undefined
是一个全局变量(在
window
的to上),默认情况下,该变量保存结果运算符
void 0
的值,并且在一些旧浏览器中可以“重写”。最新的答案在这里,在一个重复的问题中。相关帖子-,&仅仅因为它更为人所知并不意味着它更好或者可以互换使用。
void
是一个运算符而不是一个函数,因此您不必使用
void()
。如果浏览器允许您重新定义
未定义的
,那么在这些情况下,这些浏览器不也应该使用重新定义的
未定义的
?如果不是这样,重新定义
未定义的
可能有什么意义呢?@devios1确实如此。任何
窗口。未定义的
被引用,它将具有上面代码显示的新值。@ManPersonson在这种情况下,它不是重新定义它,它只是在不同的范围(窗口)中定义一个类似命名的值。
未定义的
是一个基本值。这里没有任何有意义的区别。它对你的程序有着完全相同的后果。
undefined = 1;
console.log(!!undefined); //true
console.log(!!void 0); //false