← 返回目录

3. 模板字符串

以前拼字符串像"拿胶带一段段粘"——"你好 " + name + " 今年" + age,还老漏空格。模板字符串用反引号 ` 包起来,${ } 像"插槽"直接把变量塞进去,能换行、能写表达式、还能套娃。

3.1 互动演示(实时拼接)

改上面的输入,点按钮看 ${} 插值 + 表达式效果。

3.2 知识点讲解

① 字符串拼接:+ 号 → ${}

以前用 + 把变量一段段粘进去,现在用 ${ } 直接在字符串里挖个洞放变量。

// 以前:+ 号一个接一个,还容易漏空格
let name = "大喇叭";        // 一个变量
let s = "hello " + name + "!"; // 用 + 把变量粘进去

// 现在:反引号包起来,${} 直接插变量
let s = `hello ${name}!`;   // 反引号里挖个 ${} 洞
//      ^^^^^^^^
//      挖个洞把 name 塞进去
console.log(s);             // 打印拼好的字符串
// hello 大喇叭!

${ } 里不仅能放变量,还能放表达式`a + b = ${a + b}``结果: ${sum(1, 2)}` 都合法——会先算出结果再插进字符串。

② 多行字符串:不用 \n 拼接

以前写 HTML 得每一行末尾加 \n+,像打地鼠;反引号里直接换行,长什么样就长什么样。

// 以前:\n + 号拼到崩溃
let html = "<ul>\n" +   // 每行末尾手动加 \n 和 +
  " <li>大哥</li>\n" +
  " <li>二哥</li>\n" +
  "</ul>";

// 现在:反引号里直接换行,所见即所得
let html = `                  // 反引号里怎么写就怎么存
<ul>
 <li>大哥</li>
 <li>二哥</li>
</ul>`;

模板字符串里的换行和缩进会原样保留,渲染到页面上可能多出空行和空格——所以一般末尾配合 .trim 去一下首尾空白。

③ 插入函数调用结果

function sum(a, b) { return a + b; } // 一个求和函数
let s = `结果是: ${sum(1, 2)}`;      // ${} 里直接调函数
//        ^^^^^^^^^^ 直接调函数,把返回值插进去
console.log(s); // 打印拼好的
// 结果是: 3

④ 嵌套模板字符串(动态拼 HTML 必备)

渲染列表时,外层模板包整个 <ul>${ } 里面再用 .map 给每一项生成一个 <li>——模板套模板。

let goods = ["手机", "电脑", "耳机"]; // 一组商品
let html = `                          // 外层大模板
<ul>
${goods.map(g => `<li>${g}</li>`).join("")} // map 出每个 li 再拼起来
// ^^^^ 外层 ${} 里再写一个反引号模板,map 出每个 <li>
</ul>`;

${ } 里再写一个反引号,就是嵌套模板。渲染列表、表格行时就是这个套路:外层大模板 + 内层 .map 小模板。

3.3 实战:用在哪 / 常见坑 / 怎么解决

① 可能在什么地方用:拼 HTML 片段、拼提示文案、拼接口 URL 参数、动态生成列表项、日志信息打印。

② 常见的问题:还在用 + 拼字符串导致漏空格;${ } 里忘记写 $ 或花括号;多行模板带进来多余缩进导致前端排版错乱。

③ 解决思路:只要有变量就用反引号 + ${ };多行模板末尾 .trim;拼列表用 .map(...).join("") 去掉默认逗号。

一句话:反引号 + ${ },能插值、能写表达式、能换行、能嵌套——以后拼接字符串都用它,别再用 +。