这几天简单看了一下深入浅出es6这本书,感觉特实用,学习了一个新特性---模板字符串
在项目开发中,拼接字符串是不可缺少的,动态创建dom元素以及js操作数据都要拼接字符串,在es6出来之前,我们都通常用引号(''或"")和加号(+)来拼接字符串,麻烦不说而且还容易出错,就拿个其中的代码例子说:

  1. menuUl+="<li><i class='"+menudata[i].icon+"'></i><p onclick=\"click()\">"+ menudata[i].text +"</p></li>";

其中用到了单引号和双引号,加号以及转义字符,当时写起来颇有费劲。现在es6中的模板字符串大大解决了这种复杂又麻烦的问题

传统拼接字符串的缺点:
  * 不能多行拼接
  * 不能在拼接中插入变量
  * 不能进行简单的运算
  * 不能处理引号之间的嵌套问题
  * 麻烦,拼接过多一稍微写错就报错或显示不出来。

模板字符串就是使用两个反撇号把任何变量以及字符串都包含起来。反撇号就是键盘上tab键上方的键

写法:

  1. let word = `超级`

特性:
1 模板字符串可以引入变量,就是在字符串中用${变量名}
⚠️ ${} 模板占位符 在字符串中,javascript将模板占位符里的值插入其中,如果值是数组或者对象,他会调用toString()方法转化为字符串。如果是函数,则会使用标签模板。

  1. let word = `超级`;
  2. console.log(`今天天气${word}不错`); // 今天天气超级不错
  1. console.log(`[1,2,3,4,5]`) // [1,2,3,4,5]
  2. console.log(typeof `[1,2,3,4,5]`) //string
  1. console.log(`{name:'peter'}`) //{name:'peter'}
  2. console.log(typeof `{name:'peter'}`) // string

2 模板字符串可以进行简单的运算,通过${运算}

  1. console.log(`今天天气的温度是${parseInt(23.3)}`) //今天天气的温度是23
  2. console.log(`${1 + 2}`) //

3 模板字符串可以进行嵌套,反撇号中再可用反撇号

  1. console.log(`2 + 3 ${2 + 3 > 6 ? `>`:`<`} 6`) // 2 + 3 < 6

4 模板字符串可以多行拼接,就是字符串可以换行
⚠️ 模板字符串中所有的空格、新行、缩进,都会原样输出在生成的字符串中

  1. console.log(`今天天气超级不错,
  2. 明天的天气也肯定不错。`)

5 模板字符串主要就是简单方便,和其他的引号和加号都互不干扰,就那刚才的代码就可以这样写:

  1. menuUl+=`<li><i class="${menudata[i].icon}"></i><p onclick="click()">${menudata[i].text}</p></li>`;

这样看起来就整洁,可维护。

es6 模板字符串的优点:
1 可以多行拼接
2 可以在拼接中插入变量
3 可以进行简单的运算
4 可以互相嵌套
5 简单,方便,整洁

标签模板
在模板字符串开始的反撇号前附加一个额外的标签

  1. let message = SaferHTML`<p>${bonk.sender} 向你示好。</p>`;

等价于

  1. let message = SaferHTML(templateData, bonk.sender);

SaferHTML的方法如下:对其中的一些转义字符的转义。

  1. function SaferHTML(templateData) {
  2. var s = templateData[0];
  3. for (var i = 1; i < arguments.length; i++) {
  4. var arg = String(arguments[i]);
  5. // 如果有转义字符
  6. s += arg.replace(/&/g, "&amp;")
  7. .replace(/</g, "&lt;")
  8. .replace(/>/g, "&gt;");
  9. // 如果没有转义字符
  10. s += templateData[i];
  11. }
  12. return s;
  13. }
  1. let div = document.querySelector('div');
  2. div.innerHTML = SaferHTML`&lt;这是关于字符串模板&amp;标签模板的介绍&gt;` // <这是关于字符串模板&标签模板的介绍>
  1. function show(stringArr,...values){
  2. let output ="";
  3. let index = 0;
  4. for(;index<values.length;index++){
  5. output += stringArr [index]+values[index];
  6. }
  7. output += stringArr [index];
  8. return output;
  9. }
  1. let name = '张三',
  2. age = 20,
  3. message = show`我来给大家介绍:${name}的年龄是${age}.`;
  4. div.innerHTML = message; // 我来给大家介绍:张三的年龄是20.

对于标签模板,我基本上操作的很少,这是两个例子我是在mdn上看到的,掌握了要领,以后开发就方便了。
所谓的标签模板,就是添加额外的标签,这个标签其实就是一个函数方法的调用,这个方法es6没有实行,交给了开发者去编写操作,提高了拓展性。
就拿show说:
stringArr代表的就是一个数组,${}前后方的值,打印一下stringArr就可以得知。

在标签函数的第一个参数中,存在一个特殊的属性raw ,raw是es6的一个关于字符串的方法,我们可以通过它来访问模板字符串的原始字符串,而不经过特殊字符的替换。
使用String.raw() 方法创建原始字符串和使用默认模板函数和字符串连接创建是一样的。
根据方法里写法可知,标签模板就是遍历数组,将对应的已知的值stringArr和字符串模板values的值依次打印出来。

这是本人学习得出的结论,如果有错误,欢迎指正!

参考:深入浅出ES6和mdn:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/template_strings

es6学习笔记--模板字符串的更多相关文章

  1. ES6学习笔记之字符串的扩展

    字符串的for of ES6 为字符串添加了遍历器接口,使得字符串可以被for...of循环遍历. const str='abcd'; for(let s of str){ console.log(s ...

  2. ES6学习笔记之字符串新增方法

    1.字符串的子串识别 传统上,Javascript 只有indexof 方法,用来确定一个字符串是否包含在另一个字符串中.如: //indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的 ...

  3. ES6学习笔记(二)——字符串扩展

    相信很多人也和我一样,不喜欢这样循规蹈矩的逐条去学习语法,很枯燥乏味.主要是这样学完一遍之后,没过一段时间就忘到九霄云外了.不如实际用到的时候研究它记得牢靠,所以我就整理成笔记,加深记忆的同时便于复习 ...

  4. ES6学习笔记(3)----字符串的扩展

    参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ 字符串的扩展ES6之前只能识别\u0000 - \uFFFF 之间的字符,超过此范围,识别会出错 ...

  5. JS&ES6学习笔记(持续更新)

    ES6学习笔记(2019.7.29) 目录 ES6学习笔记(2019.7.29) let和const let let 基本用法 let 不存在变量提升 暂时性死区 不允许重复声明 块级作用域 级作用域 ...

  6. es6学习笔记-class之一概念

    前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...

  7. ES6学习笔记<四> default、rest、Multi-line Strings

    default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...

  8. ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  9. 【学习笔记】字符串—马拉车(Manacher)

    [学习笔记]字符串-马拉车(Manacher) 一:[前言] 马拉车用于求解连续回文子串问题,效率极高. 其核心思想与 \(kmp\) 类似:继承. --引自 \(yyx\) 学姐 二:[算法原理] ...

随机推荐

  1. 2018-2019-2 网络对抗技术 20162329 Exp5 MSF基础应用

    目录 Exp5 MSF基础应用 一.基础问题回答 二.攻击系统 ms08_067攻击(成功) 三.攻击浏览器 ms11_050_mshtml_cobjectelement(Win7失败) 手机浏览器攻 ...

  2. 性能之ab简单使用

    ab是apache自带的性能测试工具,他所有关注的请求返回的状态码(2XX),不关心后续处理过程,所以测试时间很小,严重依赖CPU颗粒数 一.进入ab存放的目录执行./ab.其中/ab [option ...

  3. esb和eai的区别

    话说SOA也推了很多年了,出现了比如ESB.SCA.jbi等各类技术和标准,乱的很.各类比较也说的云里雾里,在下理一理,按自己的观点说说. 先说说esb和eai的区别. 个人观点:esb就是eai+设 ...

  4. 离校登记网页项目个人总结(Alpha阶段)

    个人小结 在Alpha阶段,我和我的小团队六人,经过六天的努力完成了我们最初需求分析里的基本功能,在这里为我们团队的成功表示祝贺.在这个过程中,对于自己的表现觉得既有做的好的方面,也有很多不足需要改进 ...

  5. 2018面向对象程序设计(java)课程学习进度条

    周次 (阅读/编写)代码行数 发布博文量/评论他人博文数量 课余学习时间 学习收获的最大程序阅读或编程任务 1 30-50 1/0 5 九九乘法表 2 60-80 1/0 6 实验一,实验二 3 12 ...

  6. 2003server r2 + sql 2000 sp4 环境配置

    由于工作需求需要配置一个windows 2003 server r2 + sql 2000 sp4的环境: 一.2003server准备系统: msdn 下载 分清x86还是x64 一共有两个cd准备 ...

  7. 权限系统设计-day02

    练习中的问题: 1,<s:url action="employee_input" />这个标签用来让struts自动生成请求的路径,struts生成的路径是一个全路径, ...

  8. Hadoop 集群安装(主节点安装)

    1.下载安装包及测试文档 切换目录到/tmp view plain copy cd /tmp 下载Hadoop安装包 view plain copy wget http://192.168.1.100 ...

  9. WPF:How to display a Bitmap on Image control

    一个Bitmap文件,叫做screenShotFile, 你可以这样显示到Image控件上. BitmapImage bi = new BitmapImage();            bi.Beg ...

  10. 琐事集 vol 2

    vol 2-0 宝宝,你是不是该看书咯? 她正瘫在沙发上看剧 我刚提起看书,她惊恐地看了看我 然后眼白一翻,彻底地瘫平了 宝宝? “宝宝睡着了.” 你下周就要考护师了!很难得,她认真地睁开眼,信誓旦旦 ...