js字符串拼接性能差异微乎其微,关键在于拼接方式:少量静态用+最快,多变量/多行用模板字符串更安全清晰,大量动态拼接必须用array.join()避免循环+=。

JS 字符串拼接和模板字符串在绝大多数场景下性能几乎无差别,真正影响快慢的不是用 + 还是 `${}`,而是拼接逻辑是否合理——比如是否在循环里反复 +=,或者该不该用 Array.join()。
少量静态拼接:加号最快也最直接
像 "Loading " + i 或 "User" + id + ".json" 这类简单、固定、片段少的拼接,+ 是最优选。V8 等引擎会在编译期做常量折叠(如 "a" + "b" 直接变成 "ab"),没有函数调用开销,执行路径最短。
- 两个字面量相加(
"hello" + "world")基本零开销 - 链式过长(
a + b + c + d + e)会生成多个中间字符串,在旧环境或高频循环中才可能显出劣势 - 注意隐式转换陷阱:
1 + 2 + "3"→"33",而"3" + 1 + 2→"312"
多变量/多行/含表达式:模板字符串更安全清晰
模板字符串不是为“提速”设计的,而是为可读性、结构安全和开发体验服务的。它底层仍需构建新字符串,性能与加号基本持平,但优势明显:
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
- 插值表达式明确求值顺序:
${1 + 2}3→"33",不会被误当成字符串连接 - 天然支持换行和缩进,不用写
"line1\n" + "line2",直接回车即可 - 表达式求值开销远大于语法本身,优化重点应放在简化
${...}内部逻辑,而非纠结反引号
大量动态拼接:必须用数组 join()
当要组合几十个以上片段(如生成 HTML 列表、CSV 行、日志批量输出),无论用 + 还是模板字符串,都会因 JS 字符串不可变、频繁创建中间对象而显著拖慢速度。
- 错误做法:循环中
html += `<div>${item}</div>`(尤其千次以上) - 正确做法:先
parts.push(`...`)或parts.push(str1, str2),再parts.join("") -
join()只分配一次内存,GC 压力小,实测在 10 万次拼接时比+=快 1.5–2 倍,内存占用低一个数量级 - 配合
.filter(Boolean).map(...)处理条件拼接,比嵌套三元更易维护
性能差异真的值得纠结吗?
真实项目中,+ 和模板字符串的耗时差通常在纳秒级。V8 已深度优化两者:跳过重复解析、惰性求值、字符串内联等。你花十分钟把 + 全改成反引号,几乎不会让页面快哪怕 1ms;但若在循环里用 += 拼接上千条数据,响应延迟立刻可见。
- 选哪种,优先看可读性、安全性、团队习惯
- 微秒级差异不构成重构理由;瓶颈往往出在拼接方式,而非语法符号
- 真正卡顿的场景,99% 是没避开循环累加,而不是用了模板字符串










