ES6 -- 模板字符串使用方法

7,201 阅读2分钟

ES5输出模板字符串

我们在之前的ES5中使用javascript输出模板字符串的方法,通常是下面这样。

例子:

<div id="string">
</div>
<script type="text/javascript">
    let name = '王小端coder';
    let age = 28;
    document.getElementById('string').innerHTML = 'My name is <b>' + name + '</b> and my age is <font color="green">' + age + '</font>';
</script>

这样的做法需要使用大量的""(双引号)和+来拼接才能得到我们需要的模版。但是这样是十分不方便的。

ES6输出模板字符串

现在使用ES6提供了模板字符串,具体写法如下

例子:

<div id="string">
</div>
<script type="text/javascript">
let name = '王小端coder';
let age = 28;
document.getElementById('string').innerHTML = `My name is <b>${name}</b> and my age is <font color="green">${age}</font>`;
</script>

模板字符串用`(反引号)标识,用${}将变量括起来。这样写出来就方便多了。

模板字符串中的反引号的使用

由于反引号是模版字符串的标识,如果我们需要在字符串中使用反引号,我们就需要对其进行转义。

例子:

<div id="string">
</div>
<script type="text/javascript">
let name = '王小端coder';
let age = 28;
document.getElementById('string').innerHTML = `My name\`s <b>${name}</b> and my age is <font color="green">${age}</font>`;
</script>

注意看上面例子中的区别,将name is 修改为了 name `s

模板字符串引用变量/引用表达式/引用方法

  • 引用变量

看上面例子里面的name和age就是变量,在模板中使用了${}进行包围就可以实现了变量的引用。

  • 引用表达式

例子:

<div id="string"></div>
<script type="text/javascript">
    document.getElementById('string').innerHTML = `${ 1 + 2 }`
</script>

在${} 可以放置任意表达式

  • 引用方法
<div id="string"></div>
<script type="text/javascript">
    let name = '王小端coder';
    let age = 28;
    function fun() {
      return 'andmy age is';
    }
    document.getElementById('string').innerHTML = `My name\`s <b>${name}</b> ${fun()} <font color="green">${age}</font>`
</script>

在${} 可以放置任意方法

模板字符串的多行使用

<div id="string">
</div>
<script type="text/javascript">
let name = '王小端coder';
let age = 28;
document.getElementById('string').innerHTML = `My name\`s 
<b>${name}</b>
and my age is 
<font color="green">${age}</font>`;
</script>

注意:如果使用模版字符串表示多行字符串,所有的空格和缩进都会被保存在输出中!!

模板字符串嵌套

<div id="string"></div>
<script type="text/javascript">
    let name = '王小端coder';
    let age = 28;
    const tmp = `My name is ${name} and my age is ${`${age}`}`;
    document.getElementById('string').innerHTML = tmp;
</script>

模板编译

通过模板字符串,生成正式模板的实例

例子:

<div id="string"></div>
<script type="text/javascript">
    let template = `<ul>
      <% for(let i = 0; i < data.supplies.length; i++) { %>
        <li><%= data.supplies[i] %></li>
      <% } %>
    </ul>`;
    let parse = eval(compile(template));
    document.getElementById('string').innerHTML = parse({ supplies: [ "broom", "mop", "cleaner" ] });

    function compile(template){
      const evalExpr = /<%=(.+?)%>/g;
      const expr = /<%([\s\S]+?)%>/g;
      template = template
        .replace(evalExpr, '`); \n  echo( $1 ); \n  echo(`')
        .replace(expr, '`); \n $1 \n  echo(`');
      template = 'echo(`' + template + '`);';
      let script =
      `(function parse(data){
        let output = "";
        function echo(html){
          output += html;
        }
        ${ template }
        return output;
      })`;
      return script;
    }
</script>

标签模板

模板字符串的功能,不仅仅是上面这些。它可以紧跟在一个函数名后面,该函数将被调用来处理这个模板字符串。这被称为“标签模板”功能。标签模板其实不是模板,而是函数调用的一种特殊形式。“标签”指的就是函数,紧跟在后面的模板字符串就是它的参数。

例子:

<script type="text/javascript">
    alert`王小端coder`;
</script>