es6模板字符串用反引号支持多行、嵌入表达式、保留格式,但需注意缩进清理、null/undefined处理、性能及xss防护。

ES6 模板字符串用反引号(`)天然支持多行文本,无需换行符或加号拼接,写法直观、结构清晰——但“优雅”不只是能换行,关键是让多行内容既可读、又干净、还易维护。
直接换行,保留原始格式
模板字符串会原样保留你写的换行和空格,适合写 HTML、SQL、提示文案等需要结构对齐的场景:
- 不用
\n,也不用+拆行,直接回车即可 - 缩进和换行会如实输出,便于与最终渲染效果保持一致
例如生成一段用户卡片 HTML:
```jsconst title = "欢迎页";
const content = "这是系统默认首页";
const html = `
${title}
${content}
```
处理多余缩进,让代码更整洁
实际开发中,为保持 JS 代码缩进,多行模板常带前导空格,但这些空格会被输出,影响语义或排版。可用正则快速清理:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
- 简单去行首空格:
str.replace(/^[ ]+/gm, '') - 兼顾制表符和全角空格:
str.replace(/^\s+/gm, '') - 推荐封装成工具函数,调用时一键净化
比如:
```jsfunction trimLeadingSpace(str) {
return str.replace(/^\s+/gm, '');
}
const msg = trimLeadingSpace(`
操作成功!
请稍候刷新页面。
`); // → "操作成功!\n请稍候刷新页面。"
```
在多行中嵌入动态逻辑
不必提前拼好中间变量,直接在模板里写三元、函数调用或数组方法:
- 状态判断:
状态:${isActive ? '运行中' : '已暂停'} - 列表渲染:
共 ${list.length} 条:${list.join('、')} - 时间格式化:
更新于:${new Date().toLocaleString()}
这样避免冗余变量,逻辑集中、一目了然。
注意几个实用细节
写得顺手,也别踩坑:
- 必须用反引号,单/双引号里的
${}不生效 -
${null}或${undefined}会变成字符串"null"或"undefined",建议用${user?.name || '未知'} - 高频循环拼接(如渲染上千项)时,性能不如数组
push + join,日常使用无感,大数据量需留意 - 拼接 HTML 时,用户输入的内容必须手动转义,模板字符串本身不防 XSS










