本文最后更新于 429 天前,其中的信息可能已经有所发展或是发生改变。
Js字符串模板(又称模板字面量)是为了方便我们执行在字符串中进行插值,使用`来替代’和”,其语法格式如下:
`string text`
`string text line 1
string text line 2`
`string text ${expression} string text`
tag `string text ${expression} string text`
注:在模版字符串内使用反引号(`)时,需要在它前面加转义符(\)。
多行字符串:
console.log(`string text line 1
string text line 2`);
插入表达式:
var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and
not ${2 * a + b}.`);
嵌套模板:
在某些时候,嵌套模板是具有可配置字符串的最简单也是更可读的方法。 在模板中,只需在模板内的占位符 ${ }
内使用它们,就可以轻松地使用内部反引号。 例如,如果条件 a 是真的,那么返回这个模板化的文字。
const classes = `header ${ isLargeScreen() ? '' :
`icon-${item.isCollapsed ? 'expander' : 'collapser'}` }`;
带标签的模板字符串:
更高级的形式的模板字符串是带标签的模板字符串。标签使您可以用函数解析模板字符串。标签函数的第一个参数包含一个字符串值的数组。其余的参数与表达式相关。最后,你的函数可以返回处理好的的字符串(或者它可以返回完全不同的东西 , 如下个例子所述)。用于该标签的函数的名称可以被命名为任何名字。
let person = 'Mike';
let age = 28;
function myTag(strings, personExp, ageExp) {
let str0 = strings[0]; // "That "
let str1 = strings[1]; // " is a "
let str2 = strings[2]; // "."
let ageStr;
if (ageExp > 99){
ageStr = 'centenarian';
} else {
ageStr = 'youngster';
}
// We can even return a string built using a template literal
return `${str0}${personExp}${str1}${ageStr}${str2}`;
}
let output = myTag`That ${ person } is a ${ age }.`;
console.log(output);
// That Mike is a youngster.
原始字符串:
在标签函数的第一个参数中,存在一个特殊的属性raw
,我们可以通过它来访问模板字符串的原始字符串,而不经过特殊字符的替换。
function tag(strings) {
console.log(strings.raw[0]);
}
tag`string text line 1 \n string text line 2`;
// logs "string text line 1 \n string text line 2" ,
// including the two characters '\' and 'n'
带标签的模板字面量及转义序列:
自 ES2016 起,带标签的模版字面量遵守以下转义序列的规则:
- Unicode 字符以”\u”开头,例如
\u00A9
- Unicode 码位用”\u{}”表示,例如
\u{2F804}
- 十六进制以”\x”开头,例如
\xA9
- 八进制以”\”和数字开头,例如
\251
这表示类似下面这种带标签的模版是有问题的,因为对于每一个 ECMAScript 语法,解析器都会去查找有效的转义序列,但是只能得到这是一个形式错误的语法:
latex`\unicode`
// 在较老的 ECMAScript 版本中报错(ES2016 及更早)
// SyntaxError: malformed Unicode character escape sequence
以上就是对Js的字符串模板的介绍。