JavaScript字符串模板用反引号包裹,支持${}嵌入任意表达式,天然多行、免转义,配合标签函数可防注入,性能媲美拼接且可读性、可维护性更优。

JavaScript 中的字符串模板(Template Literals)用反引号 ` 包裹,支持嵌入表达式(${...}),比传统字符串拼接更清晰、安全、灵活。
语法简洁,多行和变量嵌入一步到位
模板字符串天然支持换行和内联变量,不用加 + 或 \n 拼接:
- 传统拼接:
"Hello " + name + ", you have " + count + " messages.\nLast login: " + new Date().toLocaleString() - 模板字符串:
`Hello ${name}, you have ${count} messages.
Last login: ${new Date().toLocaleString()}`
换行、缩进、引号都不用转义,写 HTML 片段或 SQL 查询时特别顺手。
表达式求值,不只是变量替换
`${}` 里可以是任意 JavaScript 表达式,比如函数调用、三元运算、甚至简单计算:
立即学习“Java免费学习笔记(深入)”;
`Price: $${(price * (1 - discount)).toFixed(2)}``Status: ${isActive ? 'Online' : 'Offline'}``User: ${user?.name || 'Anonymous'}`
拼接字符串做不到这点——你得先算好结果再拼,逻辑分散、易出错。
避免注入风险,天然隔离上下文
虽然模板字符串本身不防 XSS,但配合标签函数(如 html``、sql``)可实现自动转义或参数化:
-
safeHtml`可自动转义 HTML 特殊字符${userInput}` -
sql`SELECT * FROM users WHERE id = ${id}`可防止 SQL 注入(底层做参数绑定)
而普通拼接是“裸奔”操作," 一旦 userInput 含 就直接执行。
性能与可读性兼顾,现代引擎优化充分
早期有人担心模板字符串慢,但如今 V8、SpiderMonkey 等引擎已深度优化。实测在多数场景下,模板字符串与拼接性能几乎无差别,而可读性、可维护性提升显著:
- 嵌套层级深时,拼接容易漏
+或括号;模板字符串结构一目了然 - IDE 能对
${}内代码做语法高亮、自动补全、类型提示(尤其配合 TypeScript) - 重构变量名时,模板中引用自动更新;拼接字符串里的字符串字面量不会被识别为引用
不复杂但容易忽略:它不是“高级技巧”,而是现代 JavaScript 的基础表达方式。











