Does JavaScript have a built in stringbuilder class?

前端 未结 10 1611
Happy的楠姐
Happy的楠姐 2020-11-30 19:33

I see a few code project solutions.

But is there a regular implementation in JavaScript?

10条回答
  •  粉色の甜心
    2020-11-30 20:26

    No, there is no built-in support for building strings. You have to use concatenation instead.

    You can, of course, make an array of different parts of your string and then call join() on that array, but it then depends on how the join is implemented in the JavaScript interpreter you are using.

    I made an experiment to compare the speed of str1+str2 method versus array.push(str1, str2).join() method. The code was simple:

    var iIterations =800000;
    var d1 = (new Date()).valueOf();
    str1 = "";
    for (var i = 0; i

    I tested it in Internet Explorer 8 and Firefox 3.5.5, both on a Windows 7 x64.

    In the beginning I tested on small number of iterations (some hundred, some thousand items). The results were unpredictable (sometimes string concatenation took 0 milliseconds, sometimes it took 16 milliseconds, the same for array joining).

    When I increased the count to 50,000, the results were different in different browsers - in Internet Explorer the string concatenation was faster (94 milliseconds) and join was slower(125 milliseconds), while in Firefox the array join was faster (113 milliseconds) than string joining (117 milliseconds).

    Then I increased the count to 500'000. Now the array.join() was slower than string concatenation in both browsers: string concatenation was 937 ms in Internet Explorer, 1155 ms in Firefox, array join 1265 in Internet Explorer, and 1207 ms in Firefox.

    The maximum iteration count I could test in Internet Explorer without having "the script is taking too long to execute" was 850,000. Then Internet Explorer was 1593 for string concatenation and 2046 for array join, and Firefox had 2101 for string concatenation and 2249 for array join.

    Results - if the number of iterations is small, you can try to use array.join(), as it might be faster in Firefox. When the number increases, the string1+string2 method is faster.

    UPDATE

    I performed the test on Internet Explorer 6 (Windows XP). The process stopped to respond immediately and never ended, if I tried the test on more than 100,000 iterations. On 40,000 iterations the results were

    Time (strings): 59175 ms
    Time (arrays): 220 ms
    

    This means - if you need to support Internet Explorer 6, choose array.join() which is way faster than string concatenation.

提交回复
热议问题