解释带标签的模板的概念
主题
JavaScript
在GitHub上编辑
TL;DR
JavaScript 中的带标签的模板允许您使用函数解析模板字面量。该函数将字面量字符串和值作为参数接收,从而可以自定义处理模板。例如:
function tag(strings, ...values) {return strings[0] + values[0] + strings[1] + values[1] + strings[2];}const result = tag`Hello ${'world'}! How are ${'you'}?`;console.log(result); // "Hello world! How are you?"
带标签的模板
什么是带标签的模板?
带标签的模板是 JavaScript 中的一个特性,它允许您使用模板字面量调用一个函数(“标签”)。然后,标签函数可以以自定义方式处理模板字面量的各个部分(字面量字符串和插值)。
语法
带标签的模板的语法涉及在模板字面量之前放置一个函数名称:
function tag(strings, ...values) {// Custom processing}tag`template literal with ${values}`;
工作原理
当调用带标签的模板时,标签函数会收到:
- 字面量字符串的数组(模板中未插值的各个部分)
- 作为附加参数的插值
例如:
function tag(strings, ...values) {console.log(strings); // ["Hello ", "! How are ", "?"]console.log(values); // ["world", "you"]}tag`Hello ${'world'}! How are ${'you'}?`;
用例
带标签的模板可用于各种目的,例如:
- 字符串转义:通过转义用户输入来防止 XSS 攻击
- 本地化:将模板字面量翻译成不同的语言
- 自定义格式:将自定义格式应用于插值
示例
这是一个转义 HTML 的带标签模板的简单示例:
function escapeHTML(strings, ...values) {return strings.reduce((result, string, i) => {const value = values[i - 1];return (result +(value? String(value).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'): '') +string);});}const userInput = '<script>alert("XSS")</script>';const result = escapeHTML`User input: ${userInput}`;console.log(result); // "User input: <script>alert("XSS")</script>"