2014-02-19 54 views
5

閱讀下劃線的來源,我注意到使用void 0而不是undefined。我知道在某些瀏覽器中,未定義的內容可能會被覆蓋,並且在很多情況下,解決方法是在調用函數或者調用函數時忽略參數。實際上,爲了縮小目的,這樣做更合理,而不是使用void 0var undefined = void 0; vs jquery的關閉vs ...?

此外,jquery's aproach這個問題:

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

似乎是在任何意義上更好。它比void 0更具可讀性,可以進一步縮小,並可能提供一些微小的性能提升,如鏈接答案中所述。

好的,void 0在下劃線中出現了大約6次,在主幹中出現了大約9次,所以它沒有什麼區別。所以,我的問題是:是否有其他原因或特殊情況void 0是可取的?

+2

我認爲這可能與AMD和加載腳本有關,我並不十分了解這些腳本。另外,爲了提高可讀性,另一種方法是['var undefined = void 0;'](https://github.com/brainling/combobuilder/blob/7c7de6e9c58004425f2f775b96799ec8ba9fff2d/app/assets/javascripts/harmony.js# L9)在頂部。任何理由不這樣做? – spelufo

+0

根據[MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void),您不應該重新定義'undefined'。 MDN也表示寫'void 0'或'void(0)'就等於直接寫'undefined'。 –

+1

我認爲「無效0」我只是比檢查typeof for'undefined'更直截了當。它也可以消除使用typeof來確保你沒有檢查名爲「undefined」的變量的需要。 –

回答

1

下面是一個爲什麼「未定義參數」的東西可能是一個可怕的想法的例子。

假設你已經習慣了這樣做。你也開始將它應用到其他功能上,像這樣:

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

所有的不錯,對不對?

假設這個函數是一個事件處理函數。

someElement.onclick = doSomething; 

哦,親愛的。 doSomething獲得傳遞一個Event對象,這肯定是而不是undefined

void 0更強大,因爲它不依賴於一個怪癖或假設工作。

+0

你不會檢查typeof =='undefined'來避免這種歧義嗎? –

+0

@SonicSoul我會的,是的。我個人使用'typeof x =='undefined',因爲它是最可讀的。 –

+0

我認爲這是正確的答案,因爲它給出了一個可能的解釋,爲什麼有些人可能更喜歡'void 0',而不是因爲我認爲使用'void 0'更好。 – spelufo

0

如您所說,void 0表示undefined。由於舊版瀏覽器undefined可以被覆蓋。 void 0有保證,並且始終未定義。但我不認爲,沒有參數undefined(jquery way)和void 0之間沒有太大的區別。

我認爲,void 0只是一個編碼偏好。