标记字符串

紧接在模板文字之前识别的函数用于解释它,在所谓的标记模板文字中。标记函数可以返回一个字符串,但它也可以返回任何其他类型的值。

标记函数 strings 的第一个参数是文字的每个常量部分的数组。其余参数 ...substitutions 包含每个 ${} 替换表达式的评估值。

function settings(strings, ...substitutions) {
  const result = new Map();
  for (let i = 0; i < substitutions.length; i++) {
    result.set(strings[i].trim(), substitutions[i]);
  }
  return result;
}

const remoteConfiguration = settings`
  label    ${'Content'}
  servers  ${2 * 8 + 1}
  hostname ${location.hostname}
`;
Map {"label" => "Content", "servers" => 17, "hostname" => "stackoverflow.com"}

strings 数组有一个特殊的 .raw 属性,它引用了模板文字的相同常量部分的并行数组,但与源代码中出现的完全相同,没有替换任何反斜杠转义。

function example(strings, ...substitutions) {
  console.log('strings:', strings);
  console.log('...substitutions:', substitutions);
}

example`Hello ${'world'}.\n\nHow are you?`;
strings: ["Hello ", ".\n\nHow are you?", raw: ["Hello ", ".\\n\\nHow are you?"]]
substitutions: ["world"]