concat()," ="之间有区别吗?和" + ="

时间:2016-11-21 19:40:22

标签: javascript performance concatenation

我想知道以下语句在结合两个字符串str1='a'str2='b'

时的性能是否有任何差异
str1 = str1 + str2;

str1 += str2;

var res = str1.concat(str2);

我已经尝试过以下方法来测量性能,但是对于同一个语句,输出似乎从一个执行到另一个执行变化很大。

var str1='a', str2='b';
var old_time=new Date();
for (var i=0; i<=1000000 ; i++){    
    str1=str1+str2;      // change this one with the other statements
}
var new_time=new Date();
console.log(new_time - old_time);

3 个答案:

答案 0 :(得分:0)

根据MDN&#34;强烈建议使用赋值运算符(+,+ =)代替concat()方法。请参阅此performance test&#34;

答案 1 :(得分:0)

尽管

str1 += str2;

似乎比str1 = str1 + str2; BUT快一点,因为字符串是不可变的,你不能重用str1的旧引用。例如:

str0 = str1;   // duplicate reference
str1 += str2;

str0 lust 保留其旧值(在与str2连接之前),因此在连接之后,str1是一个新对象(与可变对象不同)就地连接可以更快,因为我们期望s0也能更改

我仍然更喜欢+=语法,因为它更简洁,更容易掌握。

答案 2 :(得分:-1)

这三种连接方法之间的区别在于concat方法需要在String.prototype获取/查找(我猜String是本地引用的,而不是getted / lookup-在全局对象上编辑,因此,“慢”。

我不确定+== ... + ...,但+=应该比= ... + ...更快,因为它是原生的。