2

統籌考慮以下幾點:兄弟姐妹替換是否在標籤模板中組合?

String.raw`Test ${123}${'abc'}`; 
String.raw`Test ${123 + 'abc'}`; 

${123}${'abc'}相當於${123 + 'abc'}?換句話說,在後臺將cibling轉換爲${123 + 'abc'}格式?

另外,有人將如何處理在他們自己的標記模板功能這個特定的情況?

+0

沒有,他們是作爲兩個獨立的參數模板標籤通過,它們之間的空字符串。根據標籤,結果可能與 – Bergi

回答

1

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 
+0

相同。使用'+'也會處理來自'.valueOf()'的值,而模板替換方法使用'.toString()'。這種情況沒有什麼不同,但在一般情況下非常重要。 – loganfsmyth