这是我参与更文挑战的第6天,活动详情查看: 更文挑战
概念: 模板字面量是允许嵌入表达式的字符串字面量。
那它的语法是怎样的呢?
`string text`
`string text line 1
string text line 2`
`string text ${expression} string text`
tag `string text ${expression} string text`
我们来看一下具体的描述
1.模板字符串使用反引号来代替普通字符串中的用双引号和单引号
2.模板字符串可以包含特定语法(${expression})的占位符。
3.占位符中的表达式和周围的文本会一起传递给一个默认函数,该函数负责将所有的部分连接起来
4.如果一个模板字符串由表达式开头,则该字符串被称为带标签的模板字符串,该表达式通常是一个函数,它会在模板字符串处理后被调用
5.在输出最终结果前,你都可以通过该函数来对模板字符串进行操作处理。在模版字符串内使用反引号(`)时,需要在它前面加转义符(\)。
带标签的模版字面量及转义序列
自ES2016起,带标签的模版字面量遵守以下转义序列的规则:
-
Unicode字符以"\u"开头,例如\u00A9
-
Unicode码位用"\u{}"表示,例如\u{2F804}
-
十六进制以"\x"开头,例如\xA9
-
八进制以""和数字开头,例如\251
这表示类似下面这种带标签的模版是有问题的,因为对于每一个ECMAScript语法,解析器都会去查找有效的转义序列,但是只能得到这是一个形式错误的语法:
latex`\unicode`
// 在较老的ECMAScript版本(ES2016及更早)中报错
使用String.raw() 方法创建原始字符串和使用默认模板函数和字符串连接创建相同
var str = String.raw`We\x${6+2}hh!`;
// "We\x8hh!"
str.split('').join(',');
// "W,e,\,x,n,8,!,h,h"
str.length;
// 8