【发布时间】:2011-08-08 16:29:45
【问题描述】:
undefined 和 void 0 之间到底有什么区别?
哪个是首选,为什么?
【问题讨论】:
-
最新的答案在这里stackoverflow.com/a/19369078/1903116,在一个重复的问题中。
标签: javascript undefined void
undefined 和 void 0 之间到底有什么区别?
哪个是首选,为什么?
【问题讨论】:
标签: javascript undefined void
使用undefined。它比void(0) 更广为人知。
【讨论】:
undefined,而不是运算符的结果(当然它在技术上是相同的,但它更具人类可读性)
此处的括号是可选的,void 0、void(0) 和 void (0) 是等价的。 void 是一个具有从右到左结合性的一元运算符,因此值放在它的右侧:
void <VALUE>.
对于第二个问题,您需要直接使用undefined,同时避免不必要的操作数评估来检索相同的undefined 值。
更多信息参考:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/void
【讨论】:
void 是运算符而不是函数。
undefined,同时避免不必要的操作数评估以检索相同的undefined 值。' – 这甚至意味着什么?
undefined 是一个全局变量(在 window 上),它默认保存结果运算符 void 0 的值和在一些旧浏览器中可以“重写”。
不同之处在于某些浏览器允许您覆盖undefined 的值。但是,void anything 总是返回真正的 undefined。
undefined = 1;
console.log(!!undefined); //true
console.log(!!void 0); //false
【讨论】:
void 是运算符而不是函数,因此您不必使用void()。
undefined,那么在这些情况下,这样的浏览器不应该也使用重新定义的undefined吗?否则重新定义undefined 会有什么意义?
window.undefined 的地方,都会有上面代码显示的新值。
undefined 是一个原始值。那里没有有意义的区别。它对您的程序具有完全相同的后果。
undefined has normal variable semantics that not even strict mode can fix 并且需要运行时查找。它可以被阴影
像任何其他变量一样,默认的全局变量undefined 在 ES3 中不是只读的。
void 0 实际上是 undefined 的编译时防弹常量,没有查找要求。它是
就像写null 或true,而不是查找变量值。它开箱即用,没有任何安全参数,并且编写时间更短。各方面都更好。
【讨论】:
undefined 缩小为a,而void 0 不可缩小:)
undefined的不同闭包中得到所有不同的字母,如abc。 void 0 在任何地方都是 void 0。无论如何,这种技术肯定会混淆已经优化undefined(FF,Chrome 但不是 IE10)的 JIT,因为它是一个全局常量,甚至静态分析也可以查看它是否被遮蔽。有了这个,你把它变成了一个普通的变量查找,它肯定不是一个编译时常量。当然这可能无关紧要,但这不是论点:P
void 0 和 undefined 被识别为编译时常量,但将其保存到变量中是完全不同的