ES6(ECMAScript 6)新特性之模板字符串用法分析


Posted in Javascript onApril 01, 2017

本文实例讲述了ES6(ECMAScript 6)新特性之模板字符串用法。分享给大家供大家参考,具体如下:

ES6引入了一种新型的字符串字面量语法,我们称之为模板字符串(template strings)。除了使用反撇号字符 ` 代替普通字符串的引号 ' 或 " 外,它们看起来与普通字符串并无二致。在最简单的情况下,它们与普通字符串的表现一致:

context.fillText(`Ceci n'est pas une cha?ne.`, x, y);

但我们不能说:“原来只是被反撇号括起来的普通字符串啊”。模板字符串为JavaScript提供了简单的字符串插值功能,从此以后,你可以通过一种更加美观、更加方便的方式向字符串中插值了。这在Java和C#中早已经有了,不用再用 + 符号连接字符串,用起来很方便~

模板字符串的使用方式成千上万,但最让我暖心的是将其应用于毫不起眼的错误消息提示:

function authorize(user, action) {
  if (!user.hasPrivilege(action)) {
    throw new Error(
    `用户 ${user.name} 未被授权执行 ${action} 操作。`);
  }
}

在这个示例中,${user.name}${action} 被称为模板占位符,JavaScript将把user.name和action的值插入到最终生成的字符串中,例如:用户jorendorff未被授权打冰球。(这是真的,我还没有获得冰球许可证。)

到目前为止,我们所了解到的仅仅是比+运算符更优雅的语法,下面是你可能期待的一些特性细节:

模板占位符中的代码可以是任意JavaScript表达式,所以函数调用、算数运算等这些都可以作为占位符使用,你甚至可以在一个模板字符串中嵌套另一个,我称之为模板套构(template inception)。

如果这两个值都不是字符串,可以按照常规将其转换为字符串。例如:如果action是一个对象,将会调用它的.toString()方法将其转换为字符串值。

如果你需要在模板字符串中书写反撇号,你必须使用反斜杠将其转义:`\``等价于"`"。

同样地,如果你需要在模板字符串中引入字符$和{。无论你要实现什么样的目标,你都需要用反斜杠转义每一个字符:`$`和`\{`。

与普通字符串不同的是,模板字符串可以多行书写:

$("#warning").html(`
  <h1>小心!>/h1>
  <p>未经授权打冰球可能受罚
   将近${maxPenalty}分钟。</p>`);

模板字符串中所有的空格、新行、缩进,都会原样输出在生成的字符串中。

希望本文所述对大家ECMAScript程序设计有所帮助。

Javascript 相关文章推荐
jquery中获得$.ajax()事件返回的值并添加事件的方法
Apr 15 Javascript
js propertychange和oninput事件
Sep 28 Javascript
jquery插件NProgress.js制作网页加载进度条
Jun 05 Javascript
JavaScript  cookie 跨域访问之广告推广
Apr 20 Javascript
Angularjs CURD 详解及实例代码
Sep 14 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
Feb 19 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
Mar 20 Javascript
vuex 的简单使用
Mar 22 Javascript
vue引入js数字小键盘的实现代码
May 14 Javascript
浅谈react性能优化的方法
Sep 05 Javascript
Three.js实现3D机房效果
Dec 30 Javascript
js实现数字从零慢慢增加到指定数字示例
Nov 07 Javascript
Linux CentOS系统下安装node.js与express的方法
Apr 01 #Javascript
原生JS实现九宫格抽奖效果
Apr 01 #Javascript
关于Node.js的events.EventEmitter用法介绍
Apr 01 #Javascript
ES6 Promise对象概念与用法分析
Apr 01 #Javascript
JavaScript中闭包的详解
Apr 01 #Javascript
基于JavaScript实现验证码功能
Apr 01 #Javascript
AngularJS1.X学习笔记2-数据绑定详解
Apr 01 #Javascript
You might like
php实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
解析PHP中ob_start()函数的用法
2013/06/24 PHP
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
2014/10/30 PHP
PHP执行SQL文件并将SQL文件导入到数据库
2015/09/17 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
2016/03/18 PHP
php中引用符号(&amp;)的使用详细介绍
2016/12/06 PHP
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
DIV菜单层实现代码
2010/11/19 Javascript
jQuery实现长文字部分显示代码
2013/05/13 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
2013/09/18 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
jquery实现广告上下滚动效果
2021/03/04 jQuery
[01:07:22]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG加赛
2014/05/26 DOTA
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
python实现读取并显示图片的两种方法
2017/01/13 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
基于tensorflow for循环 while循环案例
2020/06/30 Python
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
精彩的英文自荐信
2014/01/30 职场文书
社区创先争优承诺书
2014/08/30 职场文书
创业的9条正确思考方式
2019/08/26 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
《艾尔登法环》Boss腐烂树灵很有可能是《黑暗之魂3》的一个废案
2022/04/11 其他游戏
Java 多线程并发FutureTask
2022/06/28 Java/Android
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android