前言

ES6(ES2015)为 JavaScript 引入了许多新特性,其中与字符串处理相关的一个新特性——模板字面量,提供了多行字符串、字符串模板的功能,相信很多人已经在使用了。字符串模板的基本使用很简单,今天就带大家来了解了解模板字符串。

一、基本使用

1、传统字符串

传统做法需要使用大量的“”(双引号)和+来拼接才能得到我们需要的模版。但是这样是十分不方便的。并且存下一下几点缺陷:

1)传统的字符串拼接不能正常换行
2)传统的字符串拼接不能友好的插入变量
3)传统的字符串拼接不能友好的处理单引号、双引号互相嵌套的问题。

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

2、模板字符串

使用反引号(`)做标识,可以定义多行字符串,在字符串中使用${}嵌入变量。在模板字符串中的任何变量最终都会变为String类型输出。

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

二、区别

1、拼接区别

普通拼接

 var html = '<div>' +'<img src="" alt="">' +'<p>Today is a good day</p>' +'</div>'

模板字符串拼接

 var html = `  <div><img src="" alt=""><p>Today is a good day</p></div>`

省了很多 ‘+’ 而且结构更加清晰,更加简单。

2、嵌套区别

普通对象嵌套

  let name = "浩东"let good = "today"let zhd = 'Hello' + name + ',' + 'How are you' + good + '?'console.log(zhd);

模板字符对象串嵌套

 // 字符串中嵌入变量let name = "浩东"let good = "today"let zhd = `Hello ${name}, How are you ${good}?`console.log(zhd);

普通表达式嵌套

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

模板字符串表达式嵌套

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

可以看到Es6模板字符串的嵌套不仅更加的简单,而且逗号显示也更加的清晰。普通的嵌套更容易出错。而且模板字符串还有一个更大的优点,那就是嵌套里面还能嵌套。

模板字符串多重嵌套

const tmpl = addrs => `<table>${addrs.map(addr => `<tr><td>${addr.first}</td></tr><tr><td>${addr.last}</td></tr>`).join('')}</table>
`;//调用
const data = [{ first: '<Jane>', last: 'Bond' },{ first: 'Lars', last: '<Croft>' },
];console.log(tmpl(data));
// <table>
//
//   <tr><td><Jane></td></tr>
//   <tr><td>Bond</td></tr>
//
//   <tr><td>Lars</td></tr>
//   <tr><td><Croft></td></tr>
//
// </table>

三、更多特点

1、模板字符串调用函数

 <script>function gettime() {var myDate = new Date;var year = myDate.getFullYear(); //获取当前年var mon = myDate.getMonth() + 1; //获取当前月var date = myDate.getDate(); //获取当前日var week = myDate.getDay();var weeks = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];return year + "年" + mon + "月" + date + "日" + weeks[week]}let a = `<p>${gettime()}</p>`console.log(a);</script>

四、封装一个模板字符串

目的

实现将字符串’我是{{name}},职业{{job}},工资{{salary}}'里的占位符用变量代替。

思想

1、定义一个模板字符串正则/{{(\w+)}}/,匹配字符串中{{}}的内容,然后通过if判断模板里是否有字符串模板。

2、如果有,那么就查找模板里的第一个模板字符串字段,并将其渲染,用相应的值替代,并通过render函数递归的渲染返回渲染后的结构。

3、如果没有,那么直接返回模板字符串。

代码

function render(template, data) {    const reg = /\{\{(\w+)\}\}/;     if (reg.test(template)) {        const name = reg.exec(template)[1];        template = template.replace(reg, data[name]);        return render(template, data); }    return template;
}
let template = '我是{{name}},职业{{job}},工资{{salary}}';
let person = { name: '阿巴', job: '前端', salary:30000};
console.log(render(template, person)); // 我是阿巴,职业前端,工资30000

Es6模板字符串封装与使用相关推荐

  1. 后端字段为null,前端使用ES6模板字符串进行展示

    项目需求:后端字段为null,前端使用ES6模板字符串展示为空 未处理前效果: // ES6的模板字符串可写表达式<template #default="{ row }"&g ...

  2. [ 前端开发 ] ES6模板字符串

    ES6模板字符串 模板字符串是 ES6 的新特性,他的作用是减少了字符串的拼接操作,提高了程序的可读性 接下来看一个栗子

  3. 重学ES6 模板字符串

    在两三年前,jQuery还是比较主流的开发技术,当我们要为页面添加DOM时,一般,我们是这样写的 $("#container").append('Today is <b> ...

  4. ES6模板字符串【${}配合反单引号一起用】

    转自: https://www.cnblogs.com/shihuc/p/10238511.html 先看看JavaScript中两个字符串的效果,就很容易知道模板字符串是个啥东西,其实一点也不新鲜. ...

  5. 高级JavaScript #ES6(模板字符串,let,箭头函数,forof,参数增强,解构,class,promise)

    模板字符串 1.模板字符串: 只要拼接字符串 都用模板字符串代替+a.整个字符串包裹在一对儿反引号 ` ` 中b.反引号``中支持换行 c.反引号中需要动态生成的内容必须放在${}里d. ${}里: ...

  6. ES6 模板字符串 ``

    参考原文链接 1. 使用JavaScript输出字符串,通常是下面这样的: console.log("He is <b>"+person.name+"< ...

  7. ES6模板字符串的扩展

    1.模板字符串的扩展 1.1传统的Jquery方法 <div class="content"></div><script>let name = ...

  8. es6模板字符串中标签模板作为参数时产生空元素的问题

    当模板字符串作为标签模板使用时,标签函数接受到的参数分别为(arr,-values) arr:模板字符串中所有那些没有变量替换的部分 -values:各个变量替换后的值 即 let a = 'Oh!' ...

  9. es6模板字符串中循环遍历数据踩坑

    应该很少有这种需求,需要在模板字符串利循环遍历数据,现在框架都有自己模板语法. 我这里踩的坑是,我在模板字符串中用forEach,map遍历循环时,返回值一直是一个undefined 用for循环re ...

  10. js es6 模板字符串和使用

    模板字符串描述: 模板字符串使用反引号 (``) 来代替普通字符串中的用双引号和单引号.模板字符串可以包含特定语法(${expression})的占位符.占位符中的表达式和周围的文本会一起传递给一个默 ...

最新文章

  1. MySQL数据库开发常见问题及几点优化!
  2. Python局域网socket无法连接的问题解决
  3. Redis scan命令原理
  4. 多种脚本语言生成九九乘法口诀表
  5. java 中不常见的关键字:strictfp,transient
  6. 写python笔记本推荐_写个python程序帮你清理垃圾
  7. MAC 设置$PATH 关闭terminal后就失效 解决方案
  8. 查看linux服务器的配置
  9. 三校生计算机word基础知识,三校生计算机第一次月考计算机基础、word.doc
  10. 从程序员到软件设计师
  11. 漫画:什么是加密算法?
  12. python批量生成姓名_python——批量生成姓名
  13. 七升七降调号_巧识五线谱08:如何记住七个“降号调”的调号与调的对应关系?...
  14. 0-博客笔记导读目录(全部)-20220506backup
  15. WordPress多功能主题 The7 更新至 v10.4.3 – 已激活汉化版
  16. yield方法释放锁吗_java多线程,让步yield
  17. 详解163、CN2-GT和CN2-GIA的区别
  18. 高德地图-----国家和省级地图切换
  19. FFmpeg - Windows下使用MSYS2和VS编译FFmpeg
  20. 电影票房预测-kaggle项目Python项目

热门文章

  1. 【原创】全文搜索引擎技术原理入门
  2. solidworks属性管理器_SolidWorks自定义属性——属性标签编制程序
  3. .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  4. 大数据的核心价值是什么
  5. 计算机学院陈冠华,生命科学学院2020年研究生学业奖学金(老生)获奖名单公示...
  6. 利用ACC控制酷狗音乐
  7. 基于Bootstrap模板创建门户网站vue项目01
  8. C++学习系列(二)—— 核心编程(面向对象)
  9. 痛苦的刷路由器 破校园网 小米mini潘多拉
  10. WARNING: The script f2py.exe is installed in ‘C:\Users\linji\AppData\Roaming\Python\Python36\Scripts