mozilla
Your Search Results

    Template strings

    This is an experimental technology, part of the Harmony (ECMAScript 6) proposal.
    Because this technology's specification has not stabilized, check the compatibility table for usage in various browsers. Also note that the syntax and behavior of an experimental technology is subject to change in future version of browsers as the spec changes.

    Summary

    Template strings are string literals allowing embedded expressions. You can use multi-line strings and string interpolation features with them.

    Syntax

    `string text`
    
    `string text line 1
     string text line 2`
    
    `string text ${expression} string text`
    
    tag `string text ${expression} string text`
    

    Description

    Template strings are enclosed by the back-tick (` `) (grave accent) character instead of double or single quotes. Template strings can contain place holders. These are indicated by the Dollar sign and curly braces (${expression}). The expressions in the place holders and the text between them get passed to a function. The default function just concatenates the parts into a single string. If there is an expression preceding the template string (tag here),  the template string is called "tagged template string". In that case, the tag expression (usually a function) gets called with the processed template string, which you can then manipulate before outputting.

    Multi-line strings

    Any new line characters inserted in the source are part of the template string. Using normal strings, you would have to use the following syntax in order to get multi-line strings:

    console.log("string text line 1\n\
    string text line 2");
    // "string text line 1"
    // "string text line 2"

    To get the same effect with multi-line strings, you can now write:

    console.log(`string text line 1
    string text line 2`);
    // "string text line 1
    //  string text line 2"

    Expression interpolation

    In order to embed expressions within strings, you had to use the following syntax:

    var a = 5;
    var b = 10;
    console.log("Fifteen is " + (a + b) + " and not " + (2 * a + b) + ".");
    // "Fifteen is 15 and not 20."

    Now, with template strings, you are able to make use of the syntactic sugar making substitutions like this more readable:

    var a = 5;
    var b = 10;
    console.log(`Fifteen is ${a + b} and not ${2 * a + b}.`);
    // "Fifteen is 15 and not 20."

    Tagged template strings

    A more advanced form of template strings are tagged template strings. With them you are able to modify the output of template strings using a function. The first argument contains an array of string literals ("Hello " and " world" in this example). The second, and each argument after the first one, are the values of the processed (or sometimes called cooked) substitution expressions ("15" and "50" here). In the end, your function returns your manipulated string.

    var a = 5;
    var b = 10;
    
    function tag(strings, ...values) {
      console.log(strings[0]); // "Hello "
      console.log(strings[1]); // " world"
      console.log(values[0]);  // 15
      console.log(values[1]);  // 50
    
      return "Bazinga!";
    }
    
    tag`Hello ${ a + b } world ${ a * b}`;
    // "Bazinga!"
    

    Raw strings

    The special raw property, available on the first function argument of tagged template strings, allows you to access the raw strings as they were entered.

    function tag(strings, ...values) {
      return strings.raw[0];
    }
    
    tag`string text line 1 \n string text line 2`;
    // "string text line 1 \\n string text line 2"
    

    In addition, the String.raw() method exists to create raw strings just like the default template function and string concatenation would create.

    String.raw`Hi\n${2+3}!`; // "Hi\\n5!"

    Specifications

    Specification Status Comment
    ECMAScript 6 (ECMA-262)
    The definition of 'Template Literals' in that specification.

    ECMAScript 6 (ECMA-262)
    The definition of 'Tagged Templates' in that specification.
    Draft Initial definition.

    Browser compatibility

    Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
    Basic support Not supported 34 (34) Not supported Not supported Not supported
    Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
    Basic support Not supported Not supported 34.0 (34) Not supported Not supported Not supported

    See also

    Document Tags and Contributors

    Contributors to this page: ziyunfei, xfq, guptha-, sylvestre, fscholz
    Last updated by: fscholz,
    Hide Sidebar