2016-02-26 58 views
2

我想知道它是否認爲返回不同類型函數的值是不好的。考慮代碼:函數返回不同類型的值是不好的

function getInterval() { 
var interval = getIntervalValueFromLocalStorage(); 
if (interval < 0) { 
    return false; 
} 
return interval; 
} 

所以每當我需要在該函數返回的時間間隔,我可以寫

var interval = getInterval(); 
if (interval) { 
//do some staff 
} 

在這種情況下:

function getInterval() { 
    return getIntervalFromLocalStorage(); 
} 

我將不得不檢查間隔小於0並且看起來不太整齊

+0

這與使用* null *一樣醜陋。 有沒有可能與理智默認值一起工作? –

+1

請檢查以下內容http://stackoverflow.com/questions/5849256/javascript-different-return-types – RRR

+0

你可以改變你的if語句。 'if(typeof getIntervalFromLocalStorage()===「number」)'只會觸發數字,並且完全否定'getInterval'的需要 – CodingIntrigue

回答

1

對此沒有明確的客觀答案,但她e是我的承擔。

這裏主要有兩個考慮因素:性能和可讀性/可維護性。

對於總是採用相同參數類型並返回相同類型的性能會產生很大影響(例如:http://www.html5rocks.com/en/tutorials/speed/v8/)。實際上,除非您需要快速代碼,否則這些差異往往是可以忽略的

關於可維護性一致的返回值也有幫助(在我看來)。我做的一個例外是返回null,這是我會在你的情況下做的。

我建議避免即使這些如果合理可能。例如,當沒有用戶登錄時,getCurrentUser()函數可以返回AnonymousUser實例而不是null。這樣可以避免大量的空檢查以及與遺忘相關的錯誤。

所以簡而言之:避免在合理可能的情況下返回不同的類型。

2

從功能返回不同類型的值是不好的做法嗎?

是的,它當然是。儘管在某些情況下是必要的,但它會使您的代碼變得更加困難,這對於維護性和正確性非常重要。而且這也使編譯器難以優化。

在您的具體情況下,您應該在間隔ID無效時返回0而不是false