2011-11-01 45 views
4

我想知道這些方法是更好:在javascript中,哪個更好`var Obj = Obj || {}`或`如果(的OBJ === '未定義' || typeof運算的OBJ == '對象'!)`

var Obj = Obj || {}; 

if (Obj === undefined || typeof Obj !== 'object') { 
    Obj = {}; 
} 

我被告知第二種方法更好,但我不知道爲什麼。請你能向我解釋每個人的優點和缺點。

非常感謝

+2

那些代碼不會做同樣的事情......另外我不認爲你的意思是寫'Obj ==='undefined'',而是'Obj === undefined'或'typeof Obj ==='undefined''。 –

+1

@AlinPurcaru:即使'Obj === undefined'和'typeof Obj ==='undefined''也沒有意義,因爲第二個條件無論如何都會抓住它。它看起來像第二件事的作者沒有考慮代碼。 – thejh

+0

@thejh:是的,我想到了代碼,這就是爲什麼我要問一個問題。我之前使用了第一種方法,但有人告訴我這是個壞主意......他告訴我要用第二種方法。 – Shaoz

回答

2

第二種方法是簡單的更具體,所以用於創建對象的目的(如果它不存在),它是更好的。第一種方法只測試對象是否爲「真」,即如果Obj是數字5,它仍然會返回原始的Obj,而在第二種方法中,Obj必須是的類型爲「對象」被保存。

實際上,沒有太大的區別,因爲你很少遇到像上面這樣的情況;第二種方法只是告訴讀者你想要什麼,更具體地說。我喜歡第一種方法,因爲它更短,但這取決於你想要的具體程度。

2

我在第一種方法中看到的唯一問題是,如果有人定義了Obj來引用不是對象的東西,但也不是假的 - 一個非零整數,比如說 - 然後Obj將會繼續指向那個東西,然後調用Obj,假定它是一個對象將會失敗。但我仍然更喜歡簡單的第一個版本;我試圖命名空間這樣的對象,沒有人會分配任何不適當的名稱。

相關問題