標記字串

緊接在模板文字之前識別的函式用於解釋它,在所謂的標記模板文字中。標記函式可以返回一個字串,但它也可以返回任何其他型別的值。

標記函式 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"]