[译]JavaScript:ES6中的模板字符串简介

原文:http://tc39wiki.calculist.org/es6/template-strings/


ES6中的模板字符串(template string)是一种能在字符串文本中内嵌表达式的字符串字面量(string literal).这种操作在其他语言(比如shell->perl->php等)中通常称之为字符串内插(string interpolation)或者叫变量内插(Variable interpolation).模板字符串在早期的Harmony提案中称之为半字面量(Quasi Litaral),现已更名为模板字符串.

模板字符串使用反引号(backtick或者叫backquote)来代替普通字符串中的双引号(double quote)或单引号(single quote).模板字符串可以包含有占位符(placeholder),占位符使用${ }这样的语法.占位符中表达式的值以及占位符两边的文本会一起传递给一个标签函数(Tag function).这个函数是由模板字符串开头(左边的反引号之前)的一个可选的表达式决定的.如果模板字符串开头没有任何表达式,则会使用默认的标签函数.

默认模板字符串

如果不指定标签函数,则会使用默认的标签函数,该函数的行为是将模板字符串的每个部分按顺序连接成一个字符串并返回.

var x = 1;
var y = 2;
`${ x } + ${ y } = ${ x + y}`  // "1 + 2 = 3"

多行字符串

可以使用模板字符串产生多行字符串:

var s = `abc`;
assert(s === 'a\n    b\n    c');

所有的字符包括空白符都会被包含在最后的字符串内.

译者注:相当于python中的三引号:

>>> """a
... b
... c"""
'a\nb\nc'

带标签的模板字符串

如果一个模板字符是由一个表达式开头的,则该模板字符串被称为带标签的模板字符串(tagged template string).开头的这个表达式就是标签函数,解析后的模板字符串会作为参数传入标签函数.

function tag(strings, ...values) {assert(strings[0] === 'a');assert(strings[1] === 'b');assert(values[0] === 0);return 'whatever';
}
tag `a${ 42 }b`  // "whatever"

原始字符串

解析后的模板字符串中还包含了对应字符串的原始形式(未转义之前的字符串).例如,字符串\n的原始形式包含了两个字符\n,而不是单个的换行符.

标签字符串可以通过读取第一个参数的raw属性来获取到一个模板字符串的原始字符串形式.

function r(strings, ...values) {assert(strings.raw[0] === '\\n');
}r `\n`

ES6提供了一个新的函数String.raw,该函数返回的就是原生字符串.

String.raw `a\n${ 42 }b`  // "a\\n42b"
译者注:相当于python中的r:
>>> r'\n'
'\\n'

译者注:目前SpiderMonkey正在实现该特性:https://bugzilla.mozilla.org/show_bug.cgi?id=688857

你可以在这个js shell上体验一下简单的功能:http://js-quasis-libraries-and-repl.googlecode.com/svn/trunk/index.html

ESwiki上和ES6草案上有更详细的参考.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全国计算机等级考试题库二级C操作题100套(第07套)

第07套: 程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。函数fun的功能是输出这位学生的信息。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLA…

【NOI 2018】归程(Kruskal重构树)

题面在这里就不放了。 同步赛在做这个题的时候,心里有点纠结,很容易想到离线的做法,将边和询问一起按水位线排序,模拟水位下降,维护当前的各个联通块中距离$1$最近的距离,每次遇到询问时输出所在联通块的信…

jdbc连接mysql数据库的常用对象_JDBC常用对象

主要作用:注册驱动 实际开发中使用Class.forName("com.mysql,jdbc.Drive");这种方式,因为之前的方式会导致注册两次驱动获得连接 Connection getConnection(String url,String username,String password)url写法:jdbc:mysql://loca…

latex大括号 多行公式_如何快速入门 LaTeX,在 XMind 2020 中轻松输入方程。

数学方程输入对于很多理工科朋友来说是一件让人头疼的事情。不仅是数学方程本身就纷繁复杂花样百出,各种输入语法更是劝退无数人。然而很多看似复杂的东西其实并非如想象中的难,抓住本质即可快速入门。今天和大家分享下如何快速入门 LaTeX,在…

全国计算机等级考试题库二级C操作题100套(第08套)

更多干货推荐可以去牛客网看看,他们现在的IT题库内容很丰富,属于国内做的很好的了,而且是课程刷题面经求职讨论区分享,一站式求职学习网站,最最最重要的里面的资源全部免费!!!点击进…

部署及配置Lync Server 2013 监控功能

在上面一篇文章中我们已经部署了存档功能,并且在标准版环境搭建了一台SQLServer服务器作为后端数据库服务器,有了这台服务器我们可以做什么呢?存档,当然还有监控,以及整个CMS。当然这都是一步一步演变的,并…

python处理excel的方法有哪些_python简单处理excel方法

1 # codingutf-8 2 3 import xlrd # 读模块4 import xlwt # 写模块5 6 7 def read_excel():8 """9 读取excel文件方法说明(此函数只是对xlrd用法的说明,看看就好。xlrd已经很好用了)10 :return:11 """12 # 打开…

mysql 客户服务号获取_《MySQL排错指南》——1.4 获取查询信息-阿里云开发者社区...

本节书摘来自异步社区出版社《MySQL排错指南》一书中的第1章,第1.4节,作者:【美】Sveta Smirnova(斯维特 斯米尔诺娃),更多章节内容可以访问云栖社区“异步社区”公众号查看。1.4 获取查询信息正如前一节看到的一样,数…

全国计算机等级考试题库二级C操作题100套(第09套)

第09套: 给定程序中,函数fun的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。 请在程序的下划线处…

基于交换芯片的五元组的PCL规则过滤功能

2019独角兽企业重金招聘Python工程师标准>>> 基于交换芯片的五元组的PCL规则过滤功能作者: 韩大卫吉林师范大学2012.12.10Not Approved by Document Control Review Copy Only基于Marvell 98DX51xx/81xx交换芯片的五元组等的策略规则(PCL)过滤功能.现将部分的功能的…

python生成树状图_python 生成 树状结构

forwarding_recp re.compile(".*?发件人:(.*?);.*?发送时间:.*?收件人:(.*?)主题", re.S)def parse_addr(addr, split_str,): l[]ifaddr:for a inaddr.split(split_str): l.append(utils.parseaddr(a)[1])returnldef gen_forwarding(con): #参数是解析过后的邮…

remove()与empty()的区别

1、empty() - 从被选元素中删除子元素; 2、remove() - 删除被选元素(及其子元素); 3、remove() 方法也可接受一个参数,允许您对被删元素进行过滤。转载于:https://www.cnblogs.com/hwldyz/p/9335717.html

2013年6月和12月CISA考试报名,认证,CPE维持和备考要点

2013年6月和12月CISA考试报名,认证,CPE维持和备考要点 2013年6月和12月CISA考试报名,认证,CPE维持和备考要点 消息来源:http://www.isaca.org/CERTIFICATION/CISA-CERTIFIED-INFORMATION-SYSTEMS-AUDITOR/REGISTER-FOR-THE-EXAM/Pages/default.aspx在线报名费用 早…

全国计算机等级考试题库二级C操作题100套(第10套)

第10套: 给定程序中,函数fun的功能是:判定形参a所指的NN(规定N为奇数)的矩阵是否是"幻方",若是,函数返回值为1; 不是,函数返回值为0。“幻方"的判定条件是…

mysql字节对齐_结构体字节对齐(转)

结构体字节对齐在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何变量的访问都可以从任何地址开始访问,但是事实上不是如此&#xff0…

python docx 合并文档 图片_不再为处理PDF烦恼,python处理操作PDF全攻略

本篇聊下Python对pdf的各种操作,包含pdf转word,pdf转图片,pdf翻转,加密,加水印等。pdf转换word文档 保留格式pdf转换为word文档,被大众经常使用的是纯Python库pdfminer和python-docx搭配使用,不…

new blog

new blog转载于:https://www.cnblogs.com/uuzlove/p/9336405.html

windows server 2012 初安装体验

昨天晚上的windows server 2012 已时行 了发布了,为之在之前我已进行了下载测试安装,本来晚间想用来在虚拟机下进行安装VM-tool工具的,但是却因种种原因没有成功,为之补一下前面没有安装的过程截图。 进入下载页后,下载…

python 多进程 调用模块内函数_python子进程模块subprocess详解与应用实例 之一

分类: Python/Ruby 2014-09-09 10:59:42 subprocess--子进程管理器 一、subprocess 模块简介 subprocess最早是在2.4版本中引入的。 subprocess模块用来生成子进程,并可以通过管道连接它们的输入/输出/错误,以及获得它们的返回值。 它用来代替…

安卓APP_ 控件(1)—— TextView

摘自:安卓APP_ 控件(1)—— TextView 作者:丶PURSUING 发布时间: 2021-03-28 21:53:49 网址:https://blog.csdn.net/weixin_44742824/article/details/115283233 本文为学习笔记,是安卓APP学习的…