2011-11-17 74 views
4

我碰到this answer在海報建議,var something = something ||是否有任何缺陷? {}

if(typeof MyNamespace === 'undefined'){ 
    var MyNamespace = {}; 
} 

速記是

var MyNamespace = MyNamespace || {}; 

將老牌程序員推薦後者以簡化代碼,或者它過於複雜的事情,像在複雜的複合語句中濫用++--


編輯我問其原因爲B/C前陣子有人通過指出很多誰認爲他們是專業程序員的人賺了不少初學者的錯誤啓發了我。當時的情況是

if (isReady){ 
    //Do Something 
} 

而且他在說什麼是條件,不應只是空話,isReady不「的意思是」什麼,相反,我們應該用

if (isReady === true){ 
    //Do Something 
} 
+2

我強烈反對'if(isReady === true)'比'if(isReady)'更可取。後者更短,更具可讀性,其含義非常清楚。如果'isReady'不是布爾型並且作者不知道在這種情況下發生的類型強制,它可能只是一個問題。 –

+0

@TimDown我不應該使用'isReady',問題是檢查屬性/參數是否已被定義。其論點是,它可能已被定義爲「假」,這將失敗的條件,並在2個月的道路導致調試噩夢 – puk

回答

4

如果你定義的是一個命名空間對象,在風格上它是很好的和安全的,但在更廣泛地使用它之前要小心。

它不僅覆蓋值,如果它是不確定的,而且當它是false0NaNnull,或""

在一些較老的buggy瀏覽器中,如果該變量聲明位於不同的<script>元素中,它會對舊變量聲明進行破壞,而不管它是否爲真值。對不起,我不記得我頭頂的那個。

+0

我會遠離它,那麼,我不喜歡使用太多這些捷徑。 – puk

+1

@puk,在JavaScript中,快捷鍵通常意味着運送更少的代碼,這是一件好事,其他所有條件都相同。如果您和您的維護人員在幾個月後可能會理解代碼,那麼我會說去做。你總是可以做一個實驗。在你的日曆上放上一個記錄,表示「如果你知道什麼()意味着,可以從現在開始使用它」,所以在你忘記這個討論之後它會彈出。 –

2

var MyNamespace = MyNamespace || {};

很好。這真是一種風格選擇。我更喜歡||

通常MyNamespace會拋出一個引用錯誤,因爲它不存在,但它在var語句中起作用。

相關問題