很好奇,高性能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
如有帮助请采纳回答 谢谢
(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")
})();
书上的知识并不一定准确,时代变了,浏览器引擎和方法可能已经优化过了吧