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