JavaScript 字符串操作性能问题

很好奇,高性能JavaScript书中说 str += "one" + "two" 效率比 str = str + "one" + "two" 低

但是我实际循环多次操作后,发现str += "one" + "two"速度更快,是我使用的测试代码不准确吗?

测试代码:

(function () {
    var str = '';
    console.time('str += "one" + "two"')
    for (var i = 0; i < 10000000; i++) {
        str += 'one' + 'two';
    }
    console.timeEnd('str += "one" + "two"')
})();
(function () {
    var atr = '';
    console.time('atr = atr + "one" + "two"')
    for (var i = 0; i < 10000000; i++) {
        atr = atr + 'one' + 'two';
    }
    console.timeEnd('atr = atr + "one" + "two"')
})()

chrome浏览器:

IE浏览器:

火狐浏览器:

 

 

很有意思的问题

可惜MDN查不到相关区别

都是说 a += b mean a = a + b

 

经过数次尝试,也加大了循环的次数,在chrome环境下

字符串:a+=b性能优于 a = a + b

整型: 性能一致

 

可能这种测试方式也不够可观,仅这个测试用例下是这个结果

 

如果有空可以再翻下ecma看看有没有相关内容

相关文档:

ECMAScript® 2022 Language Specification 

https://tc39.es/ecma262/

 

如有帮助请采纳回答 谢谢

(function () {
    let str = '';
    console.time("+号操作")
    for (let i = 0; i < 1000000; i++) {
        str = str + 'one';
    }
    console.timeEnd("+号操作")
})();
(function () {
    let str = '';
    console.time("+=操作符")
    for (let i = 0; i < 1000000; i++) {
        str += 'one';
    }
    console.timeEnd("+=操作符")
})(); 
(function () {
    let str = '', arr = [];
    
    for(let i = 0; i < 1000000; i++){
        arr.push('one');
    }
    console.time("Arr.join")
    str = arr.join("");
    console.timeEnd("Arr.join")
})();   
(function () {
    let str = '';
    console.time("Concat")
    for(let i = 0; i < 1000000; i++){
        str = str.concat('one')
    }
    console.timeEnd("Concat")
})();   

书上的知识并不一定准确,时代变了,浏览器引擎和方法可能已经优化过了吧