javascript中如何操作字符串_模板字符串是什么【教程】

9次阅读

模板字符串es6引入的原生方案,用反引号(`)定义,支持多行、嵌入任意javaScript表达式及标签函数;常见错误包括误用单/双引号、混入全角符号、缩进空格污染内容。

javascript中如何操作字符串_模板字符串是什么【教程】

模板字符串不是“新写法的字符串教程”,而是 javascript 中解决字符串拼接、多行、嵌入表达式等实际问题的原生方案。它从 ES6 开始可用,现在所有主流环境都支持,无需 polyfill。

模板字符串用 ` 而不是 '"

这是最基础但最容易忽略的识别点:必须用反引号(`),单引号或双引号写的都不是模板字符串,哪怕内容一模一样。

常见错误现象:

  • 写了 "Hello ${name}" —— 这是普通字符串,${name} 不会被解析,原样输出
  • 复制了别人代码却把 ` 粘贴成中文全角符号(如 ```)—— 浏览器直接报 SyntaxError: Invalid or unexpected Token

正确写法示例:

立即学习Java免费学习笔记(深入)”;

const name = 'Alice'; const msg = `Hello ${name}`; // ✅ 输出 "Hello Alice"

${} 里能放任意 JavaScript 表达式,不只是变量

模板字符串的插值部分 ${...} 是表达式求值区,不是“变量占位符”。这意味着你可以直接写函数调用、三元运算、甚至简单对象属性访问。

使用场景举例:

  • `Price: $${(price * 1.1).toFixed(2)}` —— 计算+格式化一步到位
  • `Status: ${isActive ? 'online' : 'offline'}` —— 内联条件判断
  • `User: ${user?.name || 'Anonymous'}` —— 可选链 + 默认值

注意:${} 中不能有未声明变量或语法错误,否则整个模板字符串会抛 ReferenceErrorSyntaxError,和普通脚本执行规则一致。

换行和缩进会原样保留,但要注意空格语义

模板字符串天然支持多行,不需要 +n 拼接。但缩进空格也会被当作字符串内容的一部分。

常见错误现象:

  • 这样写:
const html = `   

${text}

`; // 实际结果开头和每行都有多余空格,可能破坏 HTML 结构或 css 排版

解决方案:

  • ` 放在行首,用 n 显式控制换行
  • .trim() 去首尾空白(但不处理中间缩进)
  • 更稳妥的做法是避免在模板中混入缩进,或用 String.raw + 后续处理

例如:

const html = `

${text}

`.trim(); // ✅ 清除首尾换行和空格

标签函数(tagged templates)是进阶但实用的能力

模板字符串前面加一个函数名,就变成“带标签的模板字符串”,该函数会接收插值前的字符串数组和所有表达式结果作为参数。

典型用途:

  • html`
    ${name}

    ` —— 防 xss 的模板函数(需自行实现或用库如 lit-html

  • sql`select * FROM users WHERE id = ${id}` —— 参数化查询,避免 SQL 注入
  • styled.div`color: ${color}; font-size: ${size}px;` —— CSS-in-js 库的核心机制

函数签名固定为:function tag(strings, ...values) { },其中 strings 是静态片段数组(含空字符串),values 是各插值表达式的计算结果。

容易被忽略的一点:如果模板字符串没有插值(即无 ${}),values 就是空数组,strings 是长度为 1 的数组 —— 这个边界情况常被误判导致逻辑出错。

text=ZqhQzanResources