javascript-js 如何高效的拼接字符串
在js里如果这样申明一个字符串
let str = "a"
实际上是申明了一个字符串常量,而如果我们对这个字符串进行拼接
let str = "a" + "b"
实际上是创建了一个新的字符串对象,而原先的“a”字符串对象还留在了堆里,等待GC回收
嗯,可以明确的看出,这样拼接实在不是很高效,特别是拼接次数很多的时候,频繁的创建新对象,丢弃旧对象,频繁的触发GC,js是单线程的,gc的触发也会占用线程,无疑降低了执行效率
js不像java,有stringbuilder这样的东西,但是我们可以通过数组,来实现高效的拼接字符串,在每次拼接的时候,拼接的字符串直接push进来,这样不会频繁的触发gc,频繁的创建销毁对象
先给出两个测试的例子,看看效果
首先是一般的字符串拼接
let str
console.time('test')
for(let i = 0;i < 10000000;i++){
str += " "
}
console.timeEnd('test')
打印出来的时间为1682.460ms
接下来是数组拼接
let str = [];
console.time('test')
for(let i = 0;i < 10000000;i++){
str.push(" ")
}
console.timeEnd('test')
打印出的时间为357.240ms
效果是相当的明显了,拼接的字符串数量越多,差距就越大
当我们需要使用的时候,可以调用js数组的join方法返回一个字符串常量