需要对字串反复尾部添加字串, 可能上万次的操作, 有人说, 这种情况应该使用数组, 然后再连接成字串, 但是实测发现, 对Chrome来说: 
var s = "";
for(var i=0;i<10000;i++){
   s += "abc";
}
这样比
var s = "";
var a = Array();
for(var i=0;i<10000;i++){
   a.push("abc");
}
s = a.join("");
要快了不到一倍. 甚至在头部添加也是一样(s="abc" + s), 而且其它浏览器, Firefox, Opera, IE9 的测试大体也是这样, 至少是差不多, 只有Opera是反过来的, 使用后一种方式快一点.

解决方案 »

  1.   

    绝对用数组,你要考虑IE的JS引擎,虽然chrome和火狐帮你优化了,但是保险的做法还是用数组吧.
      

  2.   

    大多数浏览器,字串更快,包括IE,只有Opera数组快,所以我觉得很多说法已经过时了 这种事本就该引擎来优化。还有那天看一个说法, undefined是全局变量,访问慢 所以有些代码回在局部定义一个undefined,评直觉,没有那么笨的引擎,测试了一下,根本没有全局变量更慢的说法。
      

  3.   

    上次我比较仔细地测试了这个问题,用+在非IE下都是比join快的,而且快的不是一点点,一千万个字符串的操作之下,用+在FF下比Chrome下快一个数量级,IEspiderMonkey对字符串的连接是做了一些特殊的优化的,用join仅仅只是为了考虑IE下的情况,IE下用join确实比+快,这也只是一些个人的理解。
      

  4.   

    a+=b执行的是a=a+b
    执行a+b得到一个新字符串,也就是重新构造了一个字符串对象,性能不高,次数少看不出,次数多性能就不行了
    join不会重新构造对象
    所以当连接次数少的时候可以用+=更直观方便
    次数很多时(比如循环中)最好基于join写一个js的StringBuilder的类来实现连接
      

  5.   

    现在中国IE6 用户最多。IE6 上测试
      

  6.   


    在这个问题上, IE6可能会慢1000倍, 你信吗? 用Chrome 0.1秒, 用IE6 就100多秒.