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
更好。事实上,我认为,作为一个一般性的指导原则,我会说:如果您对全局变量有“完全控制权”,并且知道全局变量没有被覆盖,请使用普通的old
undefined
。为了防止重新定义,可以在一个自动执行的匿名函数中一次性使用jquery的方法(可读性更强),或者使用
void“任何东西都可以,但请使用0”
,作为表示
未定义
的更稳健的通用方式,以读者可能感到困惑为代价。我认为闭包编译器和其他迷你程序会减少
typeof
==未定义的
检查,以与
void 0
进行比较,实际上。。。保存一些字节。当然,您可以通过在开始时执行类似于
\u0=void 0
的操作,然后使用
\uu
表示
未定义
,来节省一些钱。