JavaScript中字符串拼接的时间复杂度是多少?两种拼接方式哪个更优?
JavaScript字符串拼接方法对比与时间复杂度说明
时间复杂度结论
无论是使用+运算符,还是调用String.prototype.concat方法,单次拼接两个字符串的时间复杂度均为O(n + m),其中n为第一个字符串的长度,m为第二个字符串的长度。
因为JavaScript中的字符串属于不可变基础类型,两种拼接方式的底层逻辑一致:都需要先申请一块可容纳两个字符串总长度的新内存空间,再将两个原始字符串的内容逐一拷贝到新内存中,最终返回新字符串的引用,不存在时间复杂度层面的差异。
两种方法的优劣对比
- 常规双字符串拼接场景下,两者性能几乎没有差异,现代JS引擎(如V8、SpiderMonkey)对
+运算符做了大量底层优化,连续拼接场景下性能表现甚至略优于concat,且+写法更简洁,可读性更高,更推荐日常使用。 concat的独有优势是支持一次性传入多个字符串参数完成拼接,比如str1.concat(str2, str3, str4),可以减少多次中间拼接的内存分配和拷贝开销,多字符串合并场景下可以按需选用。- 两者的隐式类型转换逻辑一致,都会自动将非字符串类型的操作数/参数转换为字符串后再拼接,该场景下没有表现差异。
- 如果是循环拼接大量字符串的场景,两种方法都不推荐,建议优先使用数组
join方法或ES6模板字符串,可将整体时间复杂度优化到接近O(n)(n为最终字符串总长度)。
你给出的示例代码中,两种写法的实现效果完全一致:
function concatString(str1, str2) { // return str1 + str2; // return str1.concat(str2) }
内容的提问来源于stack exchange,提问作者Yevheniy Holubiev
相关产品推荐
相关产品推荐

