JavaScript模板字符串默认原样保留换行符和空格,因其语法设计采用反引号包裹,实现“所见即所得”;回车、缩进、首尾换行均直接转为对应\n和空格字符,无需转义。

JavaScript 模板字符串默认就原样保留多行文本、换行符和所有空格(包括缩进),这是它的天然行为,不需要额外设置。
为什么能原样保留?
模板字符串用反引号 ` 包裹,语法设计上就支持“所见即所得”:你在编辑器里怎么换行、怎么缩进,最终生成的字符串里就包含对应的 \n 和空格字符。
- 回车(
\n)会被直接保留,不需写\n转义 - 行首缩进的空格、Tab、中间多余空格,全部照搬
- 开头和结尾的换行也会保留——比如第一行前面或最后一行后面有回车,字符串里就有
常见场景与注意事项
虽然保留是默认行为,但实际使用中容易因格式美观而引入意外空白,尤其在拼接 HTML 或生成 JSON 时:
-
HTML 片段示例:
const html = `<div>\n <p>Hello</p> <p><span>立即学习</span>“<a href="https://pan.quark.cn/s/c1c2c2ed740f" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">Java免费学习笔记(深入)</a>”;</p><div class="aritcle_card flexRow"> <div class="artcardd flexRow"> <a class="aritcle_card_img" href="/xiazai/skill10362" title="java-api-doc-generator"><img src="https://img.php.cn/upload/skill/001/246/273/6adaf20d79f23518.jpg" alt="java-api-doc-generator" ></a> <div class="aritcle_card_info flexColumn"> <a href="/xiazai/skill10362" title="java-api-doc-generator">java-api-doc-generator</a> <p>分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。</p> </div> <a href="/xiazai/skill10362" title="java-api-doc-generator" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>\n</div>`;
这个字符串开头有换行,<div> 前有 0 个空格,但 <code><p></p>前有 2 个空格——全都会出现在最终 HTML 中 -
避免首尾多余换行:如果不想开头/结尾带换行,把反引号紧贴内容写:
const text = `第一行\n第二行`; // 开头无换行,结尾无换行 -
想清理多余空白?用
.trim():const clean = `<div>\n <p>text</p>\n</div>`.trim();
它会去掉首尾空白(含换行+空格),但不会动中间的缩进 - 手动调用
.replace(/\s+$/gm, '').replace(/^\s+/gm, '')清理每行首尾空格(较重) - 用
.split('\n').map(line => line.trim()).join('\n')行级清理 - 更推荐:引入轻量工具函数如
stripIndent(来自common-tags或自定义),它会分析首行缩进量并统一去除 - 输出
${foo}字面量 → 写成\${foo} - 输出反引号
`→ 写成\` - 注意:
${}里的表达式仍会执行,哪怕外面用了转义
需要自动处理缩进怎么办?
如果模板字符串缩进只是为了代码可读,但不希望这些空格进入运行结果(比如生成干净的 JSON 或 CLI 输出),可以:
特殊字符转义要点
想在模板字符串里输出字面量 ${...} 或反引号本身,得转义:

















