0Pricing
JavaScript Academy · 课时

标签模板函数

使用标签函数处理模板片段。

标签模板函数 是 CoddyKit 上的免费 JavaScript Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 JavaScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 JavaScript Academy 课程共包含 4 节课。

什么是标签函数

带标签的模板字符串是一种函数调用形式:函数名直接放在模板字符串之前。该函数会接收模板解析后的各个部分,并可以对它们进行转换。

function tag(strings, value) {
  return strings[0] + value.toUpperCase() + strings[1]
}
console.log(tag(["Hi ", "!"], "bob"))

字符串数组

标签函数接收的第一个参数是字面字符串部分组成的数组。这些部分就是占位符之间以及占位符周围的文本块。

function tag(strings) {
  return strings.join("|")
}
console.log(tag(["a", "b", "c"]))

各个值

接收字符串数组之后,标签函数会将每个插值后的值作为单独的参数接收。使用剩余参数可以将它们收集到一个数组中。

function tag(strings, ...values) {
  return values.join(",")
}
console.log(tag(["", " and ", ""], "x", "y"))

重新组装字符串

典型的标签函数会遍历字符串数组,并将每个值插入各个部分之间,根据您的需求进行转换,从而重新构建最终字符串。

function tag(strings, ...values) {
  let out = ""
  strings.forEach(function (s, i) {
    out += s + (values[i] !== undefined ? values[i] : "")
  })
  return out
}
console.log(tag(["A", "B", "C"], 1, 2))

字符串长度规则

字符串数组中的元素数量始终比值数组多一个。第一个占位符之前和最后一个占位符之后都存在文本,即使其中某些部分为空也是如此。

function tag(strings, ...values) {
  return "strings=" + strings.length + " values=" + values.length
}
console.log(tag(["", "", ""], 1, 2))

转换值

由于标签函数可以控制值的插入方式,因此您可以对值进行格式化。这里的每个数值都会在插入前加倍。

function dbl(strings, ...values) {
  let out = ""
  strings.forEach(function (s, i) {
    out += s + (values[i] !== undefined ? values[i] * 2 : "")
  })
  return out
}
console.log(dbl(["", " ", ""], 3, 4))

返回非字符串值

标签函数不必返回字符串。它可以返回任意值,例如根据模板各部分构建的对象或数组。

function parts(strings, ...values) {
  return { strings: strings, values: values }
}
const r = parts(["a", "b"], 9)
console.log(r.values[0])

raw 属性

字符串数组还带有一个 raw 属性,其中保存的是未处理转义序列的字符串。这正是 String.raw 的工作方式。

console.log(String.raw({ raw: ["a\\n", "b"] }, "X"))

将插值转换为大写

一个常见的演示标签会将每个插值值转换为大写,同时保持静态文本不变。

function loud(strings, ...values) {
  let out = ""
  strings.forEach(function (s, i) {
    out += s + (values[i] !== undefined ? String(values[i]).toUpperCase() : "")
  })
  return out
}
console.log(loud(["name is ", "."], "alice"))

为什么使用标签

标签函数支持强大的模式:转义不受信任的输入、国际化、结构化查询语言或查询构建,以及自定义格式化;这些功能都由模板结构驱动。

function highlight(strings, ...values) {
  let out = ""
  strings.forEach(function (s, i) {
    out += s + (values[i] !== undefined ? "[" + values[i] + "]" : "")
  })
  return out
}
console.log(highlight(["score: ", " pts"], 42))

忽略值

标签可以完全忽略插值值,仅根据静态部分生成输出,适用于分析或日志记录。

function onlyStatic(strings) {
  return strings.filter(function (s) { return s.length > 0 }).join(" ")
}
console.log(onlyStatic(["Hello ", " world ", ""]))

快速检查

请测试您对标签函数的了解。

回顾

回顾:带标签的模板会使用解析后的模板部分调用函数。

  • 第一个参数是字符串数组
  • 其余参数是插值值
  • 字符串数组比插值值多一个元素
  • raw 属性保存未经处理的文本
function tag(s, ...v) { return s[0] + v[0] }
console.log(tag(["go "], "fast"))

常见问题解答

「标签模板函数」课时是免费的吗?

是的 — 「标签模板函数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 JavaScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 JavaScript Academy 课程共包含 4 节课。

「标签模板函数」这节课中我会学到什么?

使用标签函数处理模板片段。 你通过在浏览器中直接运行的动手代码来练习 JavaScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 JavaScript Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 JavaScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「标签模板函数」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 JavaScript Academy 课中编写并运行代码吗?

能。每节 JavaScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 字符串插值基础
  2. 多行字符串
  3. 标签模板函数
  4. 标签模板的实际应用场景
← 返回 JavaScript Academy