2013-10-11 27 views
0
明確的數據轉換的缺點

是否有你們的在JavaScript中使用顯式數據轉換? 例如:優點和在JavaScript

//ModificationAllowed is an integer (1 or 0) value from registry 
canModifyRecord = Boolean(application.settings('ModificationAllowed')); 
if (canModifyRecord) { 
    ... do something 
} 

我要保持我的代碼儘可能的乾淨,但也許顯式轉換是多餘的?

+2

好問題,但VTC因爲這是完全基於意見。 – Yuck

回答

3

是,也不是。這一切都取決於上下文。

如果我的模型表示獲取數據,然後是。我會確保我存儲的數據是正確的。

如果我做從用戶或服務器的數據來計算,那麼是的。我將其轉換爲​​或我parseFloat他們。

但布爾檢查,如果我的檢查本地化,而不是在申請的其他地方使用的話,我一般不做爲簡潔起見轉換。但確保正確的類型(例如!!黑客)不會造成傷害。

因此,作爲一個經驗法則:

  • 是在其他地方重複使用的數據?然後確保一個正確的類型。
  • 數據範圍僅限於當前的方法/函數嗎?然後,只有在帶來實際價值(如計算)時才進行轉換。否則,鍵入自動轉換通常是可以的。
1

使用!!變量轉換爲布爾不錯,輕鬆地對我

canModifyRecord = !!application.settings('ModificationAllowed'); 
if (canModifyRecord) { 
    ... do something 
} 
+0

這種代碼不是人類應該閱讀的東西。如果要至少使用Boolean()來轉換爲布爾值,結果是相同的。 – Pavlo

+0

它看起來毫無用處:它在'if'中評估相同或不存在'!!'。 –

+0

@Pavlo我不同意。在我的愚見中,明確的強制比使用構造函數更可讀。我總是在Boolean上使用'!'和'!!'將值強制轉換爲布爾值,在'Number'和'parseFloat'上使用一元'+'和'-'將值強制轉換爲數字和'(+「」)'通過'String'和'.toString'將值強制轉換爲字符串。對於我來說,標點符號比構造函數更具可讀性,但是我認爲這只是一個偏好問題。這是沒有理由downvote一個答案。 –

3

如果您只使用該變量作爲if條件的條件,則轉換爲布爾值是多餘的,就像這裏所做的那樣。在ECMAScript中的術語,if已經converts its condition to a boolean使用ES5的ToBoolean,這是same mechanism used by Boolean(arg)

其他情況由轉換的影響,顯着平等的測試(是否嚴格或不嚴格):

"foo" == true   // false 
Boolean("foo") == true // true 

這是因爲non-strict equality algorithm的行爲是嚴重類型相關。具體而言,請參閱步驟6和7中的布爾到其他比較行爲,它將非布爾操作數轉換爲數字。

+0

謝謝,你什麼時候會使用轉換? –

+0

偉大的答案只是因爲它使這個問題的爭論點沒有意義。 – Yuck

+0

@Maximus添加了一個簡短的例子,當它有所作爲。 – apsillers