hand
_1_11_211
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 20:50:24
在 JavaScript 的发展历程中,模板字符串是 ES6 引入的一项强大特性,它为字符串的处理带来了极大的便利。本文将深入探讨模板字符串的基本语法,以及其进阶应用——标签模板的使用。
模板字符串是一种特殊的字符串,使用反引号(`)来包裹内容。它不仅可以像普通字符串一样存储文本,还能轻松实现字符串的拼接和换行,使代码更加简洁易读。
在传统的 JavaScript 中,拼接多个字符串通常使用加号(+),代码会显得冗长且难以维护。例如:
const name = 'Alice';
const age = 25;
const message = 'My name is ' + name + ', and I am ' + age + ' years old.';
console.log(message);
而使用模板字符串,我们可以通过 ${}
语法来嵌入变量,使代码更加直观:
const name = 'Alice';
const age = 25;
const message = `My name is ${name}, and I am ${age} years old.`;
console.log(message);
在普通字符串中,实现换行需要使用转义字符 \n
,而模板字符串可以直接在反引号内换行,代码结构更加清晰。
const multiLine = `This is a multi - line
string using template literals.
It's very convenient!`;
console.log(multiLine);
标签模板是模板字符串的一种高级应用。它允许我们在模板字符串前添加一个函数(标签函数),该函数可以对模板字符串的原始内容和嵌入的表达式进行处理,从而实现自定义的字符串处理逻辑。
标签函数接收两个参数:
function myTag(strings,...values) {
let result = '';
for (let i = 0; i < strings.length; i++) {
result += strings[i];
if (i < values.length) {
result += values[i].toUpperCase();
}
}
return result;
}
const name = 'bob';
const age = 30;
const output = myTag`My name is ${name}, and I am ${age} years old.`;
console.log(output);
在上述代码中,myTag
是一个标签函数。它将模板字符串中嵌入的表达式的值转换为大写,然后与原始字符串部分拼接起来。最终输出的字符串中,bob
和 30
都变成了大写。
在动态生成 HTML 内容时,为了防止 XSS 攻击,我们可以使用标签模板对用户输入进行转义处理。
function htmlEscape(strings,...values) {
let result = '';
for (let i = 0; i < strings.length; i++) {
result += strings[i];
if (i < values.length) {
// 简单的转义处理
let escaped = String(values[i])
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
result += escaped;
}
}
return result;
}
const userInput = '<script>alert("XSS")</script>';
const html = htmlEscape`<div>${userInput}</div>`;
console.log(html);
在多语言应用中,我们可以使用标签模板根据不同的语言环境对字符串进行翻译。
const translations = {
en: {
greeting: 'Hello',
intro: 'My name is %s, and I am %d years old.'
},
fr: {
greeting: 'Bonjour',
intro: 'Je m\'appelle %s, et j\'ai %d ans.'
}
};
function i18n(strings,...values) {
const lang = 'fr'; // 假设当前语言为法语
let translation = translations[lang][strings.join('')];
for (let i = 0; i < values.length; i++) {
translation = translation.replace(`%${i + 1 === 1? 's' : 'd'}`, values[i]);
}
return translation;
}
const name = 'Alice';
const age = 25;
const message = i18n`intro ${name} ${age}`;
console.log(message);
特性 | 描述 | 示例 |
---|---|---|
模板字符串基本语法 | 使用反引号包裹,支持变量嵌入和换行 | const msg = \ Hello, ${name}`;` |
标签模板 | 在模板字符串前添加标签函数,自定义字符串处理逻辑 | function myTag(strings,...values) {... } myTag\ My name is ${name}`` |
模板字符串及其标签模板的使用为 JavaScript 开发者提供了更加灵活和强大的字符串处理能力。无论是简单的字符串拼接,还是复杂的安全处理和国际化需求,它们都能帮助我们编写出更加简洁、高效的代码。希望通过本文的介绍,你能对模板字符串和标签模板有更深入的理解,并在实际项目中灵活运用。
前端 - Javascript
整章节共299节
快分享给你的小伙伴吧 ~