2016-11-11 43 views
2

我經常看到的代碼,人們使用分割方法定義一個人口稠密的陣列,像這樣:在JavaScript中,爲什麼要定義一個數組與分裂?

var colors = "red,green,blue".split(','); 

這是如何不同於:

var colors = ["red","green","blue"]; 

難道僅僅是爲了避免引用的每個值?

+10

第一個只是一個壞習慣。 –

+1

並花費更多的CPU週期。 –

+0

我想也許有人想要有特殊的代碼:)。分割創建數組有性能問題,它需要在字符串之前進行操作。 –

回答

3

拆分字符串是創建數組的不好方法。該方法存在幾個問題,包括性能,穩定性和內存消耗。它需要CPU時間來解析字符串,它很容易出錯(雙逗號,字符串中的空格等),並且意味着腳本本質上必須在內存中存儲兩倍的數據。

這不是一個好主意,而且很可能只是一個人在第一次學習字符串和數組時遇到的壞習慣。這或者他們試圖聰明地進行某種編碼練習。

作爲一個經驗法則,您應該將字符串解析爲數組的唯一時間是如果您從外部源讀取字符串數據並需要將其轉換爲本機類型。如果您事先已經知道這些值,則應該自己創建該數組。

有人可能會這樣做的一個可能原因是減少源代碼中的字符數量,交換帶寬性能。 'a,b,c,d,e,f,g'.split(',')是比['a','b','c','d','e','f','g']少的字符。

+0

糾正我,如果我錯了(我很可能),但有一個異常用例。如果您希望將字符串轉換爲字符數組「abcdefgh」.split('')可以快速獲得數組方法。 – zfrisch

+0

@zfrisch你可以做到這一點,但我想不出爲什麼你會有一個非常長的字符串,你必須硬編碼然後拆分。我說的是一個很長的字符串,因爲如果它很短,你可能只是做數組 - 當然,它很煩人,但如果它真的是a-h,我只需要手工輸入。 – vlaz

+0

我增加了一個可能的異常原因;如果該列表中有很多項目,則源代碼較短。 – Soviut

1

沒有區別,只是不好的做法和懶惰,如果有的話。我能想到使用第一種方法的唯一原因是,如果數據自然以字符串形式出現並使用數組文本使其完全不可讀。