模板字符串(Template Literals)是ES6(ES2015)引入的一种新型字符串表示方式,它使用反引号(`
)而不是单引号或双引号来定义字符串,并提供了更强大的字符串处理能力。相比传统字符串,模板字符串支持多行文本、嵌入表达式以及更灵活的字符串拼接。
核心特性:
1.多行字符串
传统字符串需要手动添加换行符(\n
)才能实现多行效果,而模板字符串直接保留换行格式
//传统
const multiLine = '第一行\n' +
'第二行\n' +
'第三行';
//模板字符串
const multiLine = `第一行
第二行
第三行`;
2. 变量插值(${expression})
通过 ${expression}
语法,可以直接在字符串中嵌入变量或表达式:
const name = '张三';
const age = 25;
// 传统方式
const greeting = '你好,' + name + ',你今年' + age + '岁了';
// 模板字符串方式
const greeting = `你好,${name},你今年${age}岁了`;
3.表达式计算
${}
内可以是任意有效的JavaScript表达式,包括运算、函数调用等:
const a = 5;
const b = 10;
console.log(`a + b = ${a + b}`); // 输出:a + b = 15
console.log(`a的平方是:${a * a}`); // 输出:a的平方是:25
4.标签模板函数
模板字符串可以配合标签函数(Tagged Template)使用,实现对字符串的定制化处理。标签函数接收字符串部分和表达式部分,返回处理后的结果:
function highlight(strings, ...values) {
let result = '';
strings.forEach((str, i) => {
result += str;
if (values[i]) {
result += `<strong>${values[i]}</strong>`;
}
});
return result;
}
const name = '李四';
const age = 30;
const message = highlight`你好,${name},你今年${age}岁了`;
// 输出:你好,<strong>李四</strong>,你今年<strong>30</strong>岁了
//strings = ["你好, ",你今年" ," 岁了"]
//values = [name , age ]
上述代码中strings
是一个数组,包含模板字符串中 所有静态文本部分(被 ${}
分隔的部分)
...values
是 剩余参数语法(Rest Parameters),表示模板字符串中 所有 ${}
插值的变量部分,以数组形式收集。