hand
_1_11_290
4
返回栏目
0k
2k
1k
2k
1k
1k
1k
2k
2k
2k
1k
2k
1k
2k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
2k
1k
1k
2k
2k
2k
3k
3k
2k
3k
2k
3k
3k
3k
1k
2k
3k
2k
2k
3k
3k
2k
2k
6k
3k
2k
2k
5k
3k
4k
3k
3k
2k
4k
3k
3k
2k
3k
3k
1k
4k
4k
4k
2k
5k
3k
2k
3k
4k
3k
3k
4k
2k
3k
3k
4k
2k
2k
3k
4k
3k
3k
2k
5k
2k
3k
3k
3k
3k
2k
3k
3k
3k
2k
2k
2k
2k
3k
2k
2k
2k
3k
2k
2k
2k
2k
2k
2k
0.1k
0.2k
3k
2k
3k
2k
0.1k
2k
2k
4k
2k
2k
1k
2k
2k
3k
3k
3k
3k
2k
2k
3k
3k
3k
4k
3k
3k
4k
3k
2k
2k
3k
3k
3k
3k
3k
3k
2k
3k
3k
4k
4k
3k
3k
2k
2k
3k
2k
2k
1k
2k
3k
1k
2k
2k
2k
2k
2k
2k
2k
2k
2k
4k
2k
3k
2k
1k
2k
2k
2k
2k
2k
3k
2k
3k
1k
2k
2k
2k
0k
2k
2k
2k
2k
2k
2k
2k
3k
2k
2k
1k
1k
3k
2k
3k
1k
2k
1k
2k
2k
2k
2k
3k
1k
3k
2k
2k
2k
2k
2k
2k
1k
2k
2k
4k
3k
3k
2k
2k
2k
2k
2k
2k
4k
3k
3k
3k
2k
2k
2k
2k
2k
2k
3k
4k
返回前端 - Javascript栏目
作者:
贺及楼
成为作者
更新日期:2025-02-21 21:21:16
在前端开发中,JavaScript 的模板标签是一个强大且实用的特性。它不仅可以处理字符串插值,还能通过自定义模板标签来实现更复杂和灵活的功能。本文将深入探讨如何自定义模板标签,介绍其原理、方法,并结合实际例子帮助大家理解和应用。
在正式介绍自定义模板标签之前,我们先简单回顾一下模板字符串和模板标签的基本概念。
模板字符串是 ES6 引入的一种新的字符串表示方式,使用反引号(`)来包裹字符串,它支持换行和插值。例如:
const name = 'John';
const greeting = `Hello, ${name}!`;
console.log(greeting); // 输出: Hello, John!
模板标签则是在模板字符串前面加上一个函数名,这个函数会对模板字符串进行处理。例如:
function myTag(strings,...values) {
let result = '';
for (let i = 0; i < strings.length; i++) {
result += strings[i];
if (i < values.length) {
result += values[i];
}
}
return result;
}
const name = 'John';
const message = myTag`Hello, ${name}!`;
console.log(message); // 输出: Hello, John!
在上述代码中,myTag
就是一个模板标签函数,它接收两个参数:strings
是一个包含模板字符串中静态部分的数组,values
是一个包含插值部分的数组。
自定义模板标签的核心就是编写一个函数,该函数会在模板字符串被使用时自动调用。这个函数接收两个主要参数:
strings
:一个包含模板字符串中所有静态部分的数组。values
:一个包含模板字符串中所有插值部分的数组。函数的返回值将作为最终处理后的结果。
我们可以使用自定义模板标签来对模板字符串进行简单的处理,例如将所有字母转换为大写。
function upper(strings,...values) {
let result = '';
for (let i = 0; i < strings.length; i++) {
result += strings[i];
if (i < values.length) {
result += String(values[i]).toUpperCase();
}
}
return result;
}
const name = 'John';
const message = upper`Hello, ${name}!`;
console.log(message); // 输出: Hello, JOHN!
在处理用户输入时,为了防止 XSS 攻击,我们可以使用自定义模板标签来对 HTML 进行转义。
function safeHTML(strings,...values) {
let result = '';
for (let i = 0; i < strings.length; i++) {
result += strings[i];
if (i < values.length) {
const value = String(values[i])
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
result += value;
}
}
return result;
}
const userInput = '<script>alert("XSS")</script>';
const html = safeHTML`<p>${userInput}</p>`;
console.log(html);
// 输出: <p><script>alert("XSS")</script></p>
我们可以使用自定义模板标签来实现简单的国际化功能。
const translations = {
'Hello, {name}!': {
en: 'Hello, {name}!',
fr: 'Bonjour, {name}!'
}
};
function i18n(strings,...values) {
const key = strings.join('{placeholder}');
const lang = 'fr'; // 假设当前语言为法语
const translation = translations[key][lang];
let result = translation;
for (let i = 0; i < values.length; i++) {
result = result.replace(`{name}`, values[i]);
}
return result;
}
const name = 'John';
const message = i18n`Hello, ${name}!`;
console.log(message); // 输出: Bonjour, John!
自定义模板标签是 JavaScript 中一个非常强大的特性,它可以让我们对模板字符串进行更灵活和复杂的处理。通过编写不同的模板标签函数,我们可以实现字符串处理、安全输出、国际化等多种功能。
功能 | 示例代码 | 说明 |
---|---|---|
简单字符串处理 | upper 函数 |
将模板字符串中的插值部分转换为大写 |
安全 HTML 输出 | safeHTML 函数 |
对模板字符串中的插值部分进行 HTML 转义,防止 XSS 攻击 |
国际化处理 | i18n 函数 |
根据不同的语言对模板字符串进行翻译 |
通过掌握自定义模板标签的方法,我们可以在前端开发中更加高效地处理字符串和实现各种功能。希望本文能帮助大家更好地理解和应用自定义模板标签。
前端 - Javascript
整章节共299节
快分享给你的小伙伴吧 ~