本书https://basarat.gitbooks.io/typescript/docs/template-strings.html中有这个例子:
var say = "a bird in hand > two in the bush";
var html = htmlEscape `<div> I would just like to say : ${say}</div>`;
// a sample tag function
function htmlEscape(literals, ...placeholders) {
let result = "";
...
// interleave the literals with the placeholders
for (let i = 0; i < placeholders.length; i++) {
result += literals[i];
result += placeholders[i]
在这种情况下是否可以生成完全相同的输入字符串转义?例如,如果占位符首先出现会发生什么?
html转义函数的作者假设第一个文字应该是html转义函数返回的字符串中的第一个。但是如果占位符${say}
排在第一位呢?换句话说,标记函数有没有办法评估占位符和文字的顺序是什么?
答案 0 :(得分:1)
模板文字始终以字符组件开头和结尾,字符组件与替换交替显示。它总是有一个字符串部分而不是替换。占位符永远不会“第一” - 它可能会出现在空字符串之后:
const say = 42;
tag `{say} it is`;
function tag(strings, ...placements) {
console.assert(strings[0] === "")
console.assert(strings[1] === " it is");
console.assert(placments[0] === 42);
console.assert(strings.length == placements.length+1);
}
请注意,标记函数永远不会生成占位符(名称),它不知道它们。它只传递放置值。