2010-04-09 59 views
3

我需要用javascript構造一個長字符串。多數民衆贊成我是如何做到這一點:如何構造一個長字符串

var html = '<div style="balbalblaba">&nbsp;</div>'; 
for(i = 1; i <= 400; i++){ 
    html+=html; 
}; 

當我在firefox中執行它的年齡或使其崩潰。什麼是最好的方式來做到這一點?通常在JS中構造大字符串的最佳方法是什麼?

有人可以幫我嗎?

+0

重複? http://stackoverflow.com/questions/202605/repeat-string-javascript – 2010-04-09 19:22:00

回答

12

我假設你的意思是html += html;

如果這樣做,在你html字符串的長度將是37 = 9.5 這超出了任何瀏覽器的限制,在任何計算機,在任何[1]已知宇宙可以處理。

如果你只是想重複串400次,使用

var res = ""; 
for (var i = 0; i < 400; ++ i) 
    res += html; 
return res; 

var res = []; 
for (var i = 0; i < 400; ++ i) 
    res.push(html); 
return res.join(""); 

查看更多選項見Repeat String - Javascript


[1]:在「這個宇宙」中。

+0

+1,但應該是「......任何瀏覽器和_已知宇宙中的任何計算機......」 – 2010-04-09 19:37:22

+0

thx爲鏈接!是的,我簡化了我的示例,發佈了一個錯誤!非常感謝解釋!它是如何來平滑數組,然後加入一些字符串更快? – meo 2010-04-09 21:25:15

+0

@david:對於長字符串,Array.join比'+ ='更高效。我現在不知道JS優化的情況,但使用'.join'來構建一個字符串來迎合舊版瀏覽器更好。 – kennytm 2010-04-09 21:31:45

0
var src = '<div style="balbalblaba">&nbsp;</div>'; 
var html = ''; 
for(i = 1; i <= 400; i++){ 
    html=+src; 
}; 

您的代碼將字符串翻倍400倍。

+0

我認爲'html = + src'使得'html'等於0. – Gabe 2010-05-08 16:50:31

1

另一種方法是通過創建一個Array的刺,然後使用。這實際上是構建字符串的Python方式,但它也適用於JavaScript。

6

字符串串聯在某些瀏覽器中很慢(咳嗽 IE6 *咳嗽*)。加入數組應比循環串聯快得多:

var arr = new Array(401); 
var html = arr.join('<div style="balbalblaba">&nbsp;</div>'); 
+0

你可以不用'new'前綴,就像'Array(401)'就足夠了。 – James 2010-04-09 19:37:50

+2

@JP:你可以,但行爲是完全一樣的,我通常更喜歡將'Array()'對象作爲構造函數在創建數組時使用它:-) – 2010-04-09 19:44:38

+1

+1這是JS中字符串乘法的習慣用法。 – bobince 2010-04-09 20:44:59

相關問題