統籌考慮以下幾點:兄弟姐妹替換是否在標籤模板中組合?
String.raw`Test ${123}${'abc'}`;
String.raw`Test ${123 + 'abc'}`;
是${123}${'abc'}
相當於${123 + 'abc'}
?換句話說,在後臺將cibling轉換爲${123 + 'abc'}
格式?
另外,有人將如何處理在他們自己的標記模板功能這個特定的情況?
統籌考慮以下幾點:兄弟姐妹替換是否在標籤模板中組合?
String.raw`Test ${123}${'abc'}`;
String.raw`Test ${123 + 'abc'}`;
是${123}${'abc'}
相當於${123 + 'abc'}
?換句話說,在後臺將cibling轉換爲${123 + 'abc'}
格式?
另外,有人將如何處理在他們自己的標記模板功能這個特定的情況?
與String.raw
的行爲基本相同。它和+
(帶有一個字符串值)執行連接,實現相同的結果。
它們之間的區別在於,第一線被推遲所述級聯對String.raw
執行,與${123}
和${'abc'}
提供給它作爲獨立參數。
在使用+
,級聯始終進行前期,只通過一個單一的值,以用於String.raw
${123 + 'abc'}
。
function foo(template, ...values) {
console.log(template, values);
}
foo`Test ${123}${'abc'}`; // [ 'Test ', '', '' ] [ 123, 'abc' ]
foo`Test ${123 + 'abc'}`; // [ 'Test ', '' ] [ '123abc' ]
與其他標記的功能外,差可以是更加明顯,因爲該函數可能之前(或除了)級聯執行其他操作。
一個人爲的例子:
// adds 99999 to each value
function bar(template, ...values) {
var raw = template.raw;
var result = raw[0];
values.forEach((value, i) => {
result += value + 99999;
result += raw[i + 1];
});
return result;
}
console.log(bar`Test ${123}${'abc'}`); // 100122abc9999
console.log(bar`Test ${123 + 'abc'}`); // 123abc99999
相同。使用'+'也會處理來自'.valueOf()'的值,而模板替換方法使用'.toString()'。這種情況沒有什麼不同,但在一般情況下非常重要。 – loganfsmyth
沒有,他們是作爲兩個獨立的參數模板標籤通過,它們之間的空字符串。根據標籤,結果可能與 – Bergi