是否可以使用标记函数参数来生成完全相同的文字和占位符序列?

时间:2017-04-10 19:57:30

标签: javascript typescript ecmascript-6

本书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}排在第一位呢?换句话说,标记函数有没有办法评估占位符和文字的顺序是什么?

1 个答案:

答案 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);
}

请注意,标记函数永远不会生成占位符(名称),它不知道它们。它只传递放置值。