Reputation: 31249
I need to construct a long string with javascript. Thats how i tried to do it:
var html = '<div style="balbalblaba"> </div>';
for(i = 1; i <= 400; i++){
html+=html;
};
When i execute that in firefox its taking ages or makes it crash. what is the best way to do that? What is generally the best way to construct big strings in JS.
can someone help me?
Upvotes: 3
Views: 4331
Reputation: 523334
I assume you mean html += html;
.
If you do that, your html
string's length will be 37 × 2400 = 9.5 × 10121 which is beyond the limit of any browsers, on any computers, in any[1] known universes can handle.
If you just want to repeat that string 400 times, use
var res = "";
for (var i = 0; i < 400; ++ i)
res += html;
return res;
or
var res = [];
for (var i = 0; i < 400; ++ i)
res.push(html);
return res.join("");
See Repeat String - Javascript for more options.
[1]: As in "this universe".
Upvotes: 12
Reputation: 344585
String concatenation is very slow in some browsers (coughIE6*cough*). Joining an array should be much quicker than looping with concatenation:
var arr = new Array(401);
var html = arr.join('<div style="balbalblaba"> </div>');
Upvotes: 6
Reputation: 26291
Another way to do it is by create an Array
of stings then using Array.join('')
. This is effectively the Python way of building strings, but it should work for JavaScript as well.
Upvotes: 1
Reputation: 16528
var src = '<div style="balbalblaba"> </div>';
var html = '';
for(i = 1; i <= 400; i++){
html=+src;
};
Your code is doubling the string 400 times.
Upvotes: 0