模板文字和标记模板文字之间的区别?

时间:2017-03-14 07:15:45

标签: javascript ecmascript-6

ES6有两种新的文字:

  • 模板文字
  • 标记的模板文字。

模板文字:支持插值的多行字符串文字。

例如:

const firstName = 'Jane';
console.log(`Hello ${firstName}! How are you today?`);

标记模板文字:是函数调用,其参数通过模板文字提供。

例如:

String.raw`Hello ${firstName}! How are you today?

这两个文字之间有什么区别?何时使用标记模板文字?

2 个答案:

答案 0 :(得分:7)

使用标记模板文字,我们可以使用函数修改模板文字的输出。第一个参数包含一个字符串文字数组。第二个,以及第一个之后的每个参数,是已处理的替换表达式的值。我们可以在函数中使用任何名称。

var a = 1;
var b = 2;

function tag(strings, ...values) {
 console.log(strings[0]); // "One "
 console.log(strings[1]); // " Two"
 console.log(strings[2]); // " Three"
 console.log(values[0]); // 1
 console.log(values[1]); // 2
}

tag`One ${ a } Two ${ b } Three`;

// One 
// Two 
// Three
// 1
// 2

这里我们的标签功能将返回带有自定义格式的输出

答案 1 :(得分:2)

ES6具有新功能

  

模板文字

  

标记模板文字(标记模板)

使得使用字符串更容易。您将文本包装在“反引号”

有了这个,我们可以:

1.Interpolate变量

let foo = "abc";

console.log(`Welcome ${foo}`);  // Welcome abc

2.插入任何表达方式

console.log(`2+3 = ${2+3}`) // 2+3 = 5

3.Declare带有'和'引号的字符串,而不必       逃避任何事情。

let foo = `foo is 'bar', "bar" is foo`

console.log(foo); // "foo is 'bar', "bar" is foo"

4.多行字符串的清除语法

let text = `foo is bar

bar is foo`  

console.log(text);

//"foo is bar

//bar is foo"

5.Tagged模板,我们可以将模板文字传递给一个函数,方法如下:

let person = 'Mike';
let age = 28;

let output = myTag `that ${ person } is ${ age }`;

function myTag(strings, personExp, ageExp) {

//strings[0] gets value "that "
//strings[1] gets value " is "
//personExp  gets value " Mike "
//ageStr     gets value "28"

return strings[0] + personExp + strings[1] + ageExp;
}

console.log(output);

// that Mike is 28

6.String.raw,我们可以得到原始表单,这是示例:

let text = String.raw `The "\n" newline won't result in a new line.'
console.log(text);
// The "\n" newline won't result in a new line.

希望这有助于!!!!!!