var undefined = void 0; vs jquery关闭vs ...?

时间:2014-02-19 14:39:35

标签: javascript underscore.js undefined void

阅读下划线的来源,我注意到使用void 0代替undefined。我知道在某些浏览器中,undefined可以被覆盖,并且在许多情况下,解决这个问题的方法只是在调用函数或return;时忽略参数。事实上,为了缩小目的,这样做比使用void 0更有意义。

此问题jquery's aproach

(function (window, undefined){
  /* ... */
}(window));

在任何意义上似乎都更好。它比void 0更具可读性,可以进一步缩小,并且可以提供一些微小的性能提升,如链接答案中所述。

好的,void 0在下划线中出现约6次,在骨干中出现9次,因此它没有太大的区别。所以,我的问题是:void 0更适合的理由或角落情况吗?

2 个答案:

答案 0 :(得分:1)

这是一个为什么“未定义的论证”可能是一个可怕的想法的例子。

让我们说你已经习惯了这样做。你开始将它应用于其他功能,如:

function doSomething(undefined) {
    // blah blah blah
    if( something == undefined) {
        // problem
    }
}

一切都好,对吧?

假设这个函数是一个事件处理程序。

someElement.onclick = doSomething;
亲爱的,亲爱的。 doSomething传递了一个Event对象,肯定是不是 undefined

void 0更加强大,因为它不依赖于怪癖或假设工作。

答案 1 :(得分:0)

正如您所说,void 0表示undefined。由于旧版浏览器undefined可以被覆盖。 void 0得到保证,并且始终未定义。但我不认为,没有参数undefined(jquery way)和void 0之间没有太大区别。

我认为,void 0只是一种编码偏好。