JavaScript ES6 模板字符串详解:基础用法与标签模板
本文详细介绍 JavaScript ES6 引入的模板字符串(Template String)功能。涵盖使用反引号定义字符串、嵌入变量表达式、处理多行文本及转义字符。重点解析“标签模板”机制,包括参数传递规则、String.raw 方法的原始字符串处理以及实际应用场景。
模板字符串(Template String)是 ES6 中增强版的字符串类型,使用反引号(`)进行标识。它既可作为普通字符串使用,也支持定义多行字符串以及在字符串内部嵌入变量。
用法
用法
// 普通字符串
`In JavaScript '\n' is a line-feed.`
// 多行字符串
`In JavaScript this is
not legal.`
// 字符串中嵌入变量
var name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?` // Hello Bob, how are you today?在上述代码示例中,模板字符串均通过反引号表示。若需在模板字符串内部使用反引号字符,必须在前添加反斜杠(\)进行转义处理。
var greeting = `\`Yo\` World!`; // `Yo` World!当使用模板字符串表示多行字符串时,输出结果将保留所有的空格、缩进以及换行符。
$('#list').html(`
<ul>
<li>first</li>
<li>second</li>
</ul>
`);前述代码表明,模板字符串中的空格与换行均被保留。例如,在 <ul> 标签前会存在一个换行符。若需去除首尾的换行和空格,可调用 trim 方法处理。
$('#list').html(`
<ul>
<li>first</li>
<li>second</li>
</ul>
`.trim());在模板字符串中嵌入变量时,需将变量名置于 ${} 符号内。大括号内部可放置任意 JavaScript 表达式,包括执行运算或访问对象属性。
var x = 1, y = 2;
`${x} + ${y} = ${x + y}`;
// "1 + 2 = 3"
`${x} + ${y * 2} = ${x + y * 2}`;
// "1 + 4 = 5"
var obj = {x: 1, y: 2};
`${obj.x + obj.y}`
// "3"模板字符串内部同样支持调用函数。
function func() {
return 'Hello';
}
`${func()} World`;
// "Hello World"若大括号内的值非字符串类型,系统将按常规规则将其转换为字符串。例如,若大括号内为对象,则默认调用该对象的 toString 方法以转换为字符串。
若模板字符串中引用的变量尚未声明,程序将抛出错误。
// 变量place没有声明
var msg = `Hello, ${place}`;
// ReferenceError: place is not defined模板字符串支持相互嵌套使用。
var tmpl = addrs => `
<table>
${addrs.map(addr => `
<tr><td>${addr.first}</td></tr>
<tr><td>${addr.last}</td></tr>
`).join('')}
</table>
`;
tmpl([{first:'a', last: 'b'}]);
// output:
/*"
<table>
<tr><td>a</td></tr>
<tr><td>b</td></tr>
</table>
"*/若需引用模板字符串本身并在需要时执行,可采用如下写法。
// 写法一
var str = 'return ' + '`Hello ${name}!`';
var func = new Function('name', str);
func('Amy'); // "Hello Amy!"
// 写法二
var str = '(name) => `Hello ${name}!`';
var func = eval.call(null, str);
func('Amy'); // "Hello Amy!"标签模板
模板字符串的功能不仅限于上述内容,它还可紧跟在一个函数之后。该函数将被调用以处理此模板字符串,此机制被称为“标签模板”(Tagged template)。
在标签模板函数中,第一个参数为包含模板字符串常量部分的数组,后续每个参数分别为对应表达式的计算结果。函数名称可任意指定。示例如下:
var a = 5, b = 10;
function tag(strings, ...values) {
console.log(strings[0]); // "Hello "
console.log(strings[1]); // " world"
console.log(strings[2]); // ""
console.log(values[0]); // 15
console.log(values[1]); // 50
return "Anything";
}
tag`Hello ${a + b} world ${a * b}`;
// Anythingalert`123`
// 等同于
alert(123)标签模板实质是一种特殊的函数调用形式,“标签”即指代该函数,紧随其后的模板字符串作为其参数。
var a = 1,
b = 2;
tag`Helo ${a + b} world ${a * b}`;前述代码中,模板字符串前存在标识名 tag,其为一个函数。整个表达式的返回值即为 tag 函数处理模板字符串后的结果。
函数 tag 依次接收多个参数。
function tag(stringArr, value1, value2) {
// ...
}
// 等同于
function tag(stringArr, ...values) {
// ...
}tag 函数的第一个参数是一个数组,其成员为模板字符串中未被变量替换的部分。换言之,变量替换仅发生在数组第一个与第二个成员之间、第二个与第三个成员之间,依此类推。
tag 函数的其余参数均为模板字符串中各变量被替换后的值。本例中,模板字符串包含两个变量,因此 tag 接收 value1 和 value2 两个参数。
tag 函数所有参数的实际值如下:
- 第一个参数: [‘Hello ‘, ’ world’, ”]
- 第二个参数: 3
- 第三个参数: 2
也就是说,tag 函数实际上是以以下形式被调用:
tag(['Hello ',' world', ''], 3, 2);String对象的raw方法
String.raw 方法用作模板字符串的处理函数,返回一个字符串,其中表达式和变量已被替换,其余部分保持原样。
关于 String.raw 的详细用法,可参考此链接:https://www.jb51.net/article/250856.htm
String.raw`Hi\n${2+3}!`;
// "Hi\n5!"
String.raw`Hi\u000A!`;
// "Hi\u000A!"
String.rwa`Hi\\n`;
// "Hi\\n"String.raw 方法可作为处理模板字符串的基础方法,它执行所有变量替换,并对斜杠进行转义,便于后续作为字符串使用。
至此,关于 JavaScript ES6 模板字符串(Template String)使用方法的介绍完毕。如需了解更多 JS Template String 相关内容,请搜索本站历史文章或继续浏览后续相关文章,感谢支持!
JS动态构建复杂嵌套JSON对象的方法
2026-11-05 15:41:52
JS负数取余为什么是负数?详解余数与模运算区别
2026-11-05 13:34:41
JS 解压出现乱码或报错怎么解决?
2026-11-05 12:32:38
JS 中 startsWith、indexOf 与正则判断字符串前缀的对比
2026-11-04 22:19:43
JS解析Excel后怎么将数据转换为JSON格式
2026-11-04 20:58:28
相关标签:
