【ES6基础】模板字符串(Template String)
栏目: JavaScript · 发布时间: 5年前
内容简介:模板字符串是ES6中非常重要的一个新特性,这个特性使得我们处理相关业务变得更加容易。比如在处理嵌入表达式、多行字符串、字符串中插入变量、字符串格式化等方面的应用。模板字符串使用反钩号(backticks,`),而不是单引号或双引号。以下是个简单的示例:今天的文章将从以下几个方面进行介绍:
模板字符串是ES6中非常重要的一个新特性,这个特性使得我们处理相关业务变得更加容易。比如在处理嵌入表达式、多行字符串、字符串中插入变量、字符串格式化等方面的应用。模板字符串使用反钩号(backticks,`),而不是单引号或双引号。以下是个简单的示例:
let str1 = `hello!!!`; //template string let str2 = "hello!!!"; console.log(str1 === str2); //output "true”复制代码
今天的文章将从以下几个方面进行介绍:
- 表达式
- 多行字符串
- 标签模板字符串(Tagged template literals)
- 原始字符串(Raw strings)
本篇文章阅读时间预计6分钟
表达式
模板字符串的出现,给ES6添加了“表达式”的概念。在ES6之前,我们只能用加号连接变量表达式,代码如下:
var a = 20; var b = 10; var c = "JavaScript"; var str = "My age is " + (a + b) + " and I love " + c; console.log(str);复制代码
自从模板字符串表达式的出现后,我们嵌入表达式的方式更加简单,即${变量表达式},变量表达式就相当函数一样,变量传值进行替换。如果我们要使用自定义的函数处理字符串,我们可以使用标签模板字符串(Tagged template literals),标签函数进行处理(a tag function)。下一小节将会讲到。先让我们看下如何使用模板字符串嵌入表达式,代码如下:
const a = 20; const b = 10; const c = "JavaScript"; const str = `My age is ${a+b} and I love ${c}`; console.log(str); //output “My age is 30 and I love JavaScript"复制代码
标签模板字符串
首先我们先创建一个标记的模板字符串,使用函数处理模板字符串,如下段代码所示:
const tag = function(strings, aPLUSb, aSTARb) { // strings is: [ 'a+b equals ', ' and a*b equals ', '' ] // aPLUSb is: 30 // aSTARb is: 200 return 'SURPRISE!'; }; const a = 20; const b = 10; let str = tag `a+b equals ${a+b} and a*b equals ${a*b}`; console.log(str);复制代码
编译器是如何处理这段代码的?第一个参数strings包含所有的静态字符串,以表达式变量进行分割成数组(类似split('$')的效果);然后逐一解析变量表达式,传到对应的参数aPLUSb和aSTARb。
如果我们想修改aPLUSb, aSTARb的值,我们可以在函数内部进行修改:
const tag = function(strings, aPLUSb, aSTARb) { // strings is: ['a+b equals', 'and a*b equals'] // aPLUSb is: 30 // aSTARb is: 200 aPLUSb = 200; aSTARb = 30; return `a+b equals ${aPLUSb} and a*b equals ${aSTARb}`; }; const a = 20; const b = 10; let str = tag `a+b equals ${a+b} and a*b equals ${a*b}`; console.log(str); //output “a+b equals 200 and a*b equals 30”复制代码
使用此方法我们可以创建灵活度更高的模板字符串,接收后台数据渲染我们前端的界面。
多行字符串
Es6的模板字符串给我们提供了一种创建多行文本字符串的新方法。在ES6之前我们只能使用"\n“在字符串中进行换行,代码如下:
console.log("1\n2\n3"); //output //1 //2 //3复制代码
在es6中,我们可以直接输入回车进行换行,如下段代码所示:
console.log(`1 2 3`);复制代码
模板字符串的方法会在每一行的最后添加"\n"进行换行。
原始字符串(Raw strings)
原始字符串是一个普通字符串,其中不会解释转义字符。我们可以使用模板字符串创建原始字符串。我们可以使用String.raw来获取原始字符串,代码如下:
let s = String.raw `xy\n${ 1 + 1 }z`; console.log(s); //output "xy\n2z"复制代码
这里的\n不被解释成换行符。相反,它是一个由两个字符组成的原始字符串,及“\”和“\n”,变量S的长度为6。如果我们使用自定义的标签函数处理模板字符串,我们可以使用String.raw方法来获取,代码如下:
let tag = function(strings, ...values) { return strings.raw[0] }; let str = tag `Hello \n World!!!`; console.log(str);” //output "Hello \n World!!!"复制代码
但是也有例外(进行转义):
- 任何以\u开头的内容都将被视为Unicode转义
- 以\x开头的任何内容都将被视为十六进制转义
- 任何以\开头然后跟着一个数字将被视为八进制转义
小节
今天的内容就介绍到这里,模板字符串让我们处理字符串更加容易,尤其是我们在渲染前端界面展示数据时,大大减少了代码量,加强了易读性。
【ES6基础】解构赋值(destructuring assignment)
更多精彩内容,请微信关注”前端达人”公众号!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 查找一个字符串中最长不含重复字符的子字符串,计算该最长子字符串的长度
- 字符串、字符处理总结
- 高频算法面试题(字符串)leetcode 387. 字符串中的第一个唯一字符
- php删除字符串最后一个字符
- (三)C语言之字符串与字符串函数
- 算法笔记字符串处理问题H:编排字符串(2064)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
高性能Python
(美)戈雷利克、(英)欧日沃尔德 / 东南大学出版社 / 2015-2
你的Python代码也许运行正确,但是你需要运行得更快速。通过探讨隐藏在设计备选方案中的基础理论,戈雷利克和欧日沃尔德编著的《高性能Python》将帮助你更深入地理解Python的实现。你将了解如何定位性能瓶颈,从而显著提升高数据流量程序中的代码执行效率。 你该如何利用多核架构和集群?或者你该如何搭建一个可以自由伸缩而不会影响可靠性的系统?有经验的Python程序员将会学习到这类问题的具体解......一起来看看 《高性能Python》 这本书的介绍吧!