我想知道以下语句在结合两个字符串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);
答案 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-在全局对象上编辑,因此,“慢”。
我不确定+=
和= ... + ...
,但+=
应该比= ... + ...
更快,因为它是原生的。