需要对字串反复尾部添加字串, 可能上万次的操作, 有人说, 这种情况应该使用数组, 然后再连接成字串, 但是实测发现, 对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是反过来的, 使用后一种方式快一点.
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是反过来的, 使用后一种方式快一点.
解决方案 »
- 进来看看好吗,有哪位大哥大姐用过remedy软件和Java开发过没。谢谢
- 求救:js计时器
- SyntaxHihglighter 3 问题
- js操作列表/菜单(select/option)的问题
- 能不能改变鼠标右键的点击后的菜单显示?
- 删除确认的实现,使用在<a>标签上,有javascript
- 大家帮我看看吧,为什么不能给编辑框赋值?
- 事件捕获脚本,转换成IE与FF都通用的代码
- 求JS代码:类似新浪搜狐等网站的广告,慢慢弹出一张非常大的图片,再自己缩小,直到不见了
- 为什么vscode里网页内嵌js里手动输入右大括号的时候会报这个错误
- 求教:如何在ie中用js来检测电脑上是否安装了某插件?
- 求助:js中的setTimeout问题
执行a+b得到一个新字符串,也就是重新构造了一个字符串对象,性能不高,次数少看不出,次数多性能就不行了
join不会重新构造对象
所以当连接次数少的时候可以用+=更直观方便
次数很多时(比如循环中)最好基于join写一个js的StringBuilder的类来实现连接
在这个问题上, IE6可能会慢1000倍, 你信吗? 用Chrome 0.1秒, 用IE6 就100多秒.