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 表达式,比如函数调用、三元运算、甚至简单计算:
`Price: $${(price * (1 - discount)).toFixed(2)}``Status: ${isActive ? 'Online' : 'Offline'}``User: ${user?.name || 'Anonymous'}`拼接字符串做不到这点——你得先算好结果再拼,逻辑分散、易出错
。
虽然模板字符串本身不防 XSS,但配合标签函数(如 html``、sql``)可实现自动转义或参数化:
safeHtml`${userInput}` 可自动转义 HTML 特殊字符sql`SELECT * FROM users WHERE id = ${id}` 可防止 SQL 注入(底层做参数绑定)而普通拼接是“裸奔”操作,"" + userInput + "" 一旦 userInput 含 就直接执行。
早期有人担心模板字符串慢,但如今 V8、SpiderMonkey 等引擎已深度优化。实测在多数场景下,模板字符串与拼接性能几乎无差别,而可读性、可维护性提升显著:
+ 或括号;模板字符串结构一目了然${} 内代码做语法高亮、自动补全、类型提示(尤其配合 TypeScript)不复杂但容易忽略:它不是“高级技巧”,而是现代 JavaScript 的基础表达方式。