模板字面量(插值型字符串字面量)
模板表达式
-
反引号括起来的是不同的字符串,在反引号内部出现的
${...}
有点类似于IIFE,允许嵌入基本的字符串插值表达式,之后这些表达式自动地被解析和求值,var name = "Kyle"; var greeting = `Hello ${name}!`; console.log( greeting ); // "Hello Kyle!" console.log( typeof greeting );
-
任何合法的表达式都被允许出现在
${..}
内部,包括函数调用,内联函数表达式调用,甚至是另一个插值型字符串字面量。${..}
会将内部转换为字符串,默认调用toString()
方法 -
反引号字符串字面量的作用域在其被调用时所在的块级/局部/全局作用域中,反引号中所有的空格都是字符串的一部分
-
在插值型字符串字面量中的换行将会被保留在字符串值中,也就是说在反引号中换行,字符串就会被分割成多行
标签型模板字面量
标签型模板字面量类似于不需要使用(...)
的函数引用,这样js中就可以支持使用
foo`Everything is ${desc}!`;
//这样会给foo函数传递两个参数,"Everything is"和"${desc}"执行后的参数
ES6内建函数`String.raw,可以被用作模板字面量标签,这个函数能够将字符串的原始版本显示出来
console.log(String.raw`123/n456`) //打印输出123/n456
console.log(`123/n456`)
//123
//456
String.raw
方法
String.raw(callSite, ...substitutions)//
String.raw`templateString`
String.raw({ raw: 'test' }, 0, 1, 2); // 't0e1s2t'
// 注意这个测试, 传入一个 string, 和一个类似数组的对象
// 下面这个函数和 `foo${2 + 3}bar${'Java' + 'Script'}baz` 是相等的.
String.raw({
raw: ['foo', 'bar', 'baz']
}, 2 + 3, 'Java' + 'Script');// 'foo5barJavaScriptbaz',这种情况换行不会被保持
该方法会忽略转义符,输出模板字符串的原始字符,但仍然允许换行,此方法会输出字符串String
.trim()
方法
方法可以消除模板字符串中的换行