Javascript var未定义=无效0;vs jquery';是结束还是。。。?
在阅读下划线的源代码时,我注意到使用了Javascript var未定义=无效0;vs jquery';是结束还是。。。?,javascript,underscore.js,undefined,void,Javascript,Underscore.js,Undefined,Void,在阅读下划线的源代码时,我注意到使用了void 0而不是undefined。我知道在某些浏览器中,未定义的内容可能会被覆盖,在许多情况下,解决方法就是在调用函数或return时省略一个参数-ing。事实上,出于缩小的目的,这样做比使用void 0更有意义 此外,关于这个问题: (function (window, undefined){ /* ... */ }(window)); 从各方面看似乎都更好。它比void 0可读性强得多,可以进一步缩小,并且可能会像链接的答案中所解释的那样提供一
void 0
而不是undefined
。我知道在某些浏览器中,未定义的内容可能会被覆盖,在许多情况下,解决方法就是在调用函数或return时省略一个参数代码>-ing。事实上,出于缩小的目的,这样做比使用void 0
更有意义
此外,关于这个问题:
(function (window, undefined){
/* ... */
}(window));
从各方面看似乎都更好。它比void 0
可读性强得多,可以进一步缩小,并且可能会像链接的答案中所解释的那样提供一些微小的性能提升
好的,void 0在下划线中显示了6次,在主干中显示了9次,所以没有太大区别。因此,我的问题是:是否有任何理由或特殊情况下,void 0
更可取?正如您所说,void 0
表示未定义。因为旧的浏览器未定义的可以被覆盖。
void 0
是有保证的,并且始终是未定义的。但我不认为,无参数未定义(jquery方式)和void0
之间没有太大区别
我认为,void 0
只是一种编码偏好。以下是一个例子,说明了为什么“未定义参数”是一个可怕的想法
假设你已经习惯了这样做。你也开始把它应用到其他函数上,比如:
function doSomething(undefined) {
// blah blah blah
if( something == undefined) {
// problem
}
}
很好,对吗
假设这个函数是一个事件处理程序
someElement.onclick = doSomething;
哦,天哪doSomething
传递一个事件对象,它肯定不是未定义的
void 0
更加健壮,因为它不依赖于怪癖或假设来工作。我认为它可能与AMD和脚本加载有关,而我对这些并不太了解。此外,另一种提高可读性的方法是只在顶部进行操作。有什么理由不这样做吗?根据,您不应该重新定义未定义的
。MDN还指出,编写void 0
或void(0)
相当于直接编写undefined
。我认为“void 0”比检查typeof中的“undefined”更简单。它还可以消除使用typeof来确保您没有检查名为“undefined”的变量的需要。您不需要检查typeof something==“undefined”来避免这种歧义吗?@SonicSoul,是的。我个人使用typeof x==“undefined”
是因为它可读性最强。我之所以将此标记为正确答案,是因为它可能解释了为什么有些人可能更喜欢void 0
,而不是因为我认为使用void 0
更好。事实上,我认为,作为一个一般性的指导原则,我会说:如果您对全局变量有“完全控制权”,并且知道全局变量没有被覆盖,请使用普通的oldundefined
。为了防止重新定义,可以在一个自动执行的匿名函数中一次性使用jquery的方法(可读性更强),或者使用void“任何东西都可以,但请使用0”
,作为表示未定义的更稳健的通用方式,以读者可能感到困惑为代价。我认为闭包编译器和其他迷你程序会减少typeof
和==未定义的检查,以与void 0
进行比较,实际上。。。保存一些字节。当然,您可以通过在开始时执行类似于\u0=void 0
的操作,然后使用\uu
表示未定义
,来节省一些钱。