2013-07-28 81 views
1

它更快做這是一個JavaScript優化?

(obj = {})[key] = val; 

然後

obj = {} 
obj[key] = val; 

或者這是剛剛完成,因爲它更容易閱讀一行?

+0

它只是更短。 –

+0

它真的很重要嗎?或者是讓代碼更易讀,更易維護? –

+8

更容易在一行中閱讀?我發現它恰恰相反。 – acdcjunior

回答

7

不,沒有真正的區別。這對大多數有經驗的編碼人員來說可能是顯而易見的,但我做了一個jsperf來證明它:http://jsperf.com/tetetetee

你看不到任何可重現的差異。如果存在差異,無論如何,它將會非常小,以至於你無法可靠地測量它。

使用第一種形式的原因只是它的編寫時間較短,而對於有經驗的JavaScript編碼人員而言,讀取時間可能會縮短一些。在某些情況下,它可能有助於使代碼更加簡潔或對稱。我個人並不不喜歡第一種形式,但我不會推薦它,因爲它會使大多數人難以閱讀代碼。

+1

該死的,你打敗了我。 – Stephen

+0

這就像條件,一個使用三元而其他使用大括號.. –

+0

我懷疑jsperf是可靠的這種微型性能測量。 –

7

我懷疑這兩個代碼片段在性能上有什麼不同。有些人只是喜歡用更緊湊的方式進行編碼。我個人認爲第一個例子非常神祕,即使作者在六個月後重新閱讀代碼時可能需要停下來弄清楚發生了什麼。

「主管程序員完全意識到自己的頭骨有限的大小,因此他完全謙卑地接近他的任務,並避免像鼠疫這樣的聰明技巧。」 — Edsger W. Dijkstra

1

我不認爲2個片段之間有任何區別,第二個片段與第一個片段相比更具可讀性。

0

兩者完全一樣。單行版本是壓縮/縮小器應該/應該在內部執行的操作,而用戶明確執行該操作。在我看來不太可讀。

0

總之:沒有功能差異,評估方式也沒有差異。它被評估的方式如下:

obj = {} 

新對象在內存中創建和參考被存儲到一個稱爲obj變量。

都在該作業的周圍放置括號((obj = {})...),只調用第二個示例中的實例(obj...)直接引用內存中的同一對象。唯一的區別是第二個代碼示例寫在一個新行上。

從那裏的代碼是完全一樣的:[key] = val,將存儲在key變量中的屬性設置爲在val中設置的值。

這表明代碼的計算結果完全相同,這意味着性能不會有任何差異。

我能想到的第一個例子是爲什麼這樣做的兩個原因是爲了使代碼更加緊湊以減小文件大小,或者僅僅是某人的個人偏好。