5

ES6 has two new kinds of literals:

  • template literals
  • tagged template literals.

Template literals: multi-line string literals that support interpolation.

eg:

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

Tagged template literals : are function calls whose parameters are provided via template literals.

eg:

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

What is difference between these two literals ? and when to use Tagged template literals?

Mukund Kumar
  • 21,413
  • 18
  • 59
  • 79
  • Are you specifically asking about `String.raw` or tagged template literals in general? – Felix Kling Mar 14 '17 at 07:19
  • @FelixKling i am asking about tagged template literals. – Mukund Kumar Mar 14 '17 at 07:21
  • 3
    Does [ES6 tagged templates practical usability](http://stackoverflow.com/q/31590975/218196) answer your question? The difference between a template literal and a tagged template literal is that the latter allows you to apply custom logic to template literals (instead of the default, which is string concatenation). – Felix Kling Mar 14 '17 at 07:23

2 Answers2

8

With tagged template literal we able to modify the output of template literals using a function. The first argument contains an array of string literals. The second, and each argument after the first one, are the values of the processed substitution expressions. We can use any name to our function.

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

here our our tag function will return the output with custom formats

Pandiyan Cool
  • 6,381
  • 8
  • 51
  • 87
  • 5
    *"first argument contains an array of string literals"* nitpick: It contains an array of string *values*. A literal is a syntactic construct that is only interesting to the parser. The interpreter creates string values from them. – Felix Kling Mar 14 '17 at 07:29
4

ES6 has new features

Template literals

and

Tagged template literals (Tagged templates)

which make working with strings easier. You wrap your text in `backticks`

With this we can:

1.Interpolate variables

let foo = "abc";

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

2.Interpolate any kind of expression

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

3.Declare strings with both ' and " quotation marks without having to escape anything.

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

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

4.Cleaner syntax for multi-line string

let text = `foo is bar

bar is foo`  

console.log(text);

//"foo is bar

//bar is foo"

5.Tagged templates, we can pass template literals to a function, here is how:

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, we can get the raw form, here is the example:

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.
Rich
  • 6,470
  • 15
  • 32
  • 53
Manishz90
  • 2,534
  • 1
  • 12
  • 11