首页 > 其他分享 >03-ES6语法:模板字面量(Template Literals)

03-ES6语法:模板字面量(Template Literals)

时间:2023-06-29 13:34:24浏览次数:35  
标签:03 Literals ES6 代码 倾耳 var 模板 字符串 一作


ES6引入了模板字面量(Template Literals),对多行字符串和字符串占位符的操作进行了增强。下面我们分别进行说明和演示。

下面是简单的屏幕分享,不爱看文字的同道中人可以看视频。-_-



一、多行字符串(Multi-line Strings)

首先我们来看下ES5中是如何表示多行字符串的,示例代码如下:

// ES5中的写法。
var content = '君不见黄河之水天上来,奔流到海不复回。 \n'
    + '君不见高堂明镜悲白发,朝如青丝暮成雪。'
    + '人生得意须尽欢,莫使金樽空对月。'
    + '天生我材必有用,千金散尽还复来。'
    + '烹羊宰牛且为乐,会须一饮三百杯。'
    + '岑夫子,丹丘生,将进酒,杯莫停。'
    + '与君歌一曲,请君为我倾耳听。(倾耳听 一作:侧耳听)'
    + '钟鼓馔玉不足贵,但愿长醉不愿醒。(不足贵 一作:何足贵;不愿醒 一作:不复醒)'
    + '古来圣贤皆寂寞,惟有饮者留其名。(古来 一作:自古;惟 通:唯)'
    + '陈王昔时宴平乐,斗酒十千恣欢谑。'
    + '主人何为言少钱,径须沽取对君酌。'
    + '五花马、千金裘,呼儿将出换美酒,与尔同销万古愁。'
console.info(content);

虽然在代码中,每行字符串都已经换行了,但是控台上输出的内容却没有换行,如下图所示:

03-ES6语法:模板字面量(Template Literals)_模板字面量

 如果要想控制台输出的内容也能进行换行的话,需要在每行字符串的后面增加换行符号(\n),如下面的代码所示:

// ES5中的写法。
var content = '君不见黄河之水天上来,奔流到海不复回。 \n'
    + '君不见高堂明镜悲白发,朝如青丝暮成雪。\n'
    + '人生得意须尽欢,莫使金樽空对月。\n'
    + '天生我材必有用,千金散尽还复来。\n'
    + '烹羊宰牛且为乐,会须一饮三百杯。\n'
    + '岑夫子,丹丘生,将进酒,杯莫停。\n'
    + '与君歌一曲,请君为我倾耳听。(倾耳听 一作:侧耳听)\n'
    + '钟鼓馔玉不足贵,但愿长醉不愿醒。(不足贵 一作:何足贵;不愿醒 一作:不复醒)\n'
    + '古来圣贤皆寂寞,惟有饮者留其名。(古来 一作:自古;惟 通:唯)\n'
    + '陈王昔时宴平乐,斗酒十千恣欢谑。\n'
    + '主人何为言少钱,径须沽取对君酌。\n'
    + '五花马、千金裘,呼儿将出换美酒,与尔同销万古愁。'
console.info(content);

请注意上述每行字符串的后面我们都增加了一个换行字符\n。这样一来,控制台输出的字符串效果就可以正常换行了。如下图所示:

03-ES6语法:模板字面量(Template Literals)_字符串占位符_02

如果将上述的代码修改为下面的格式则代码编辑器就直接报错提醒了,当然这样的代码也是不能被执行的。如下图所示:

03-ES6语法:模板字面量(Template Literals)_字符串插值_03

那么,使用ES6的语法会怎么弄呢?示例代码如下:

var content = `君不见黄河之水天上来,奔流到海不复回。
    君不见高堂明镜悲白发,朝如青丝暮成雪。
    人生得意须尽欢,莫使金樽空对月。
    天生我材必有用,千金散尽还复来。
    烹羊宰牛且为乐,会须一饮三百杯。
    岑夫子,丹丘生,将进酒,杯莫停。
    与君歌一曲,请君为我倾耳听。(倾耳听 一作:侧耳听)
    钟鼓馔玉不足贵,但愿长醉不愿醒。(不足贵 一作:何足贵;不愿醒 一作:不复醒)
    古来圣贤皆寂寞,惟有饮者留其名。(古来 一作:自古;惟 通:唯)
    陈王昔时宴平乐,斗酒十千恣欢谑。
    主人何为言少钱,径须沽取对君酌。
    五花马、千金裘,呼儿将出换美酒,与尔同销万古愁。`;
console.info(content);

看着是不是简单了许多。直接在整个字符串的开头和结尾使用了2个反引号就OK了,而且控制台输出的内容也自动就出现了换行,如下图所示:

03-ES6语法:模板字面量(Template Literals)_字符串占位符_04

不过,如果你留意观察上面的输出结果,会发现虽然换行了,但是前面好像带的有空白字符,这样的效果也不是我们想要的。我们想要的是下面的效果:

03-ES6语法:模板字面量(Template Literals)_ES6_05

可以将代码调整为如下的格式就能达到上图的效果:

03-ES6语法:模板字面量(Template Literals)_字符串占位符_06

处理的办法很简单,就是把每行字符串前面的空白都删除了。只是,这么一做,我们的代码版式看起来就不那么优美了。就这样吧,看个人喜好哈!-_-

二、模板字符串

如果想在输出的字符串中包含变量的话,又该怎么做呢?我们还是先来看看ES5中是如何做的,如下面的示例代码:

var firstName = "Jim";
var lastName = "Green";
var message = "My name is " + firstName + " " + lastName;
console.info(message);

可以看到是通过连接符+将字符串和变量连接到一起的。上述代码在控制台中输出的结果如下图所示:

03-ES6语法:模板字面量(Template Literals)_字符串占位符_07

那么,在ES6中如果要实现上面的字符串输出功能的话,可以怎么做呢?下面是示例代码:

var firstName = "Jim";
var lastName = "Green";
var message = `My name is ${firstName} ${lastName}`;
console.info(message);

上面的代码就是使用ES6字符串占位符的机制,提供了简单的字符串插值功能,直接在输出的字符串中使用${NAME}占位符语法,其中花括号{}里面的NAME可以是变量、JS表达式和函数。特别需要注意的是:字符串用的是反引号,而不是单引号或者双引号,后2种输出的内容是原汁原味的,而没有用实际的内容替换掉占位符。

有了这些基本的知识,差不多就可以使用ES6的字符串插值功能了。如果你想了解更多的内容,可以继续往下。

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

比如下面的代码是函数调用:

function getName() {
    return "Jim Green";
}
var message = `My name is ${getName()}`;
console.info(message);

需要留意的是:不能少了函数名后面的括号(),否则输出的插值内容就是函数代码了,如下图所示:

03-ES6语法:模板字面量(Template Literals)_模板字面量_08

我们再来看一个模板字符串嵌套另一个模板字符串的示例:

var firstName = "Jim";
var lastName = "Green";
var fullName = `${firstName} ${lastName}`;
var message = `My name is ${fullName}`;
console.info(message);

看完上述的代码,是不是感觉着所谓的嵌套另外一个模板字符串,听起来挺高级的,本质上不过就是一个JS的变量而已。-_-

2、如果你需要在模板字符串中书写反撇号,你必须使用反斜杠将其转义:`\``等价于"`"。 同样地,如果你需要在模板字符串中引入字符$和{。无论要实现什么样的目标,都需要用反斜杠转义每一个字符:`\$`和`\{`。

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

var content = `君不见黄河之水天上来,奔流到海不复回。
    君不见高堂明镜悲白发,朝如青丝暮成雪。
    人生得意须尽欢,莫使金樽空对月。
    天生我材必有用,千金散尽还复来。
    烹羊宰牛且为乐,会须一饮三百杯。
    岑夫子,丹丘生,将进酒,杯莫停。
    与君歌一曲,请君为我倾耳听。(倾耳听 一作:侧耳听)
    钟鼓馔玉不足贵,但愿长醉不愿醒。(不足贵 一作:何足贵;不愿醒 一作:不复醒)
    古来圣贤皆寂寞,惟有饮者留其名。(古来 一作:自古;惟 通:唯)
    陈王昔时宴平乐,斗酒十千恣欢谑。
    主人何为言少钱,径须沽取对君酌。
    五花马、千金裘,呼儿将出换美酒,与尔同销万古愁。`;
console.info(content);

这是我们前面的示例代码,需要注意的是:模板字符串中所有的空格、新行、缩进,都会原样的输出在生成的字符串中。

标签:03,Literals,ES6,代码,倾耳,var,模板,字符串,一作
From: https://blog.51cto.com/u_3319687/6581503

相关文章

  • 光脚丫学LINQ(003):排序结果集
    视频演示:http://u.115.com/file/f2e2959888 通常可以很方便地将返回的数据进行排序。orderby子句将使返回的序列中的元素按照被排序的类型的默认比较器进行排序。例如,下面的查询可以扩展为按Name属性对结果进行排序。因为Name是一个字符串,所以默认比较器执行从A到Z的字母......
  • appium报错AttributeError: 'WebDriver' object has no attribute 'find_element_by_i
    解决方法:fromappium.webdriver.common.appiumbyimportAppiumBy#导入AppiumBysearch=driver.find_element(AppiumBy.ID,"com.android.settings:id/search")#编写格式:driver.find_element(by=AppiumBy.ACCESSIBILITY_ID,value='accessibility_id')思考流程:......
  • NodeJS系列(6)- ECMAScript 6 (ES6) 语法(四)
    本文在“NodeJS系列(2)-NPM项目Import/ExportES6模块”的npmdemo项目的基础上,继续介绍并演示Promise对象、Generator函数、async函数等ES6语法和概念。NodeJSES6:https://nodejs.org/en/docs/es6ECMA:https://www.ecma-international.org/publications-and-standard......
  • Codeforces[CF1036B]Diagonal Walking v.2题解
    题目大意很明显,这道题就是求k步之内到达点\((a,b)\),然后尽量走对角线,求能走对角线的最大值。做题思路首先明白一个事实,即一个对角线可以通过增加一步而抵达点不变,如图:我们可以这样思考这道题,在到达目的地以后,剩余步数如果为双数,则在对角线来回走,最后会到目的地。但如果剩......
  • ligntOj 1038(期望)
    题意:给出一个n,一步操作是让n除n的一个随机因子得到新的n,问可以得到新的n是1的步数期望。题解:因为n/1=n这种选择会造成循环,所以需要用到递推,令n变成1的步数期望是f[n],比如n是2,f[2]=1/2(f[2]+1)+1/2(f[1]+1),加1是因为2变成2也需要一步,那么移项后,f[2]=2+f[1]=2+0=......
  • NodeJS系列(5)- ECMAScript 6 (ES6) 语法(三)
    在“NodeJS系列(3)-ECMAScript6(ES6)语法(一)”和“NodeJS系列(4)-ECMAScript6(ES6)语法(二)”里,我们介绍并演示let、const、Symbol、函数扩展、类等ES6语法和概念。本文在“NodeJS系列(2)-NPM项目Import/ExportES6模块”的npmdemo项目的基础上,继续介绍并演示Ref......
  • Java基础03: 数据类型
    一、Java的数据类型强类型语言要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用弱类型语言Java的数据类型分为两大类基本类型:primitivetype引用类型:referencetype二、示例示例1:publicclassDemo02{publicstaticvoidmain(String[]args){Stringa......
  • Jmeter访问网站返回403(CSRF verification failed. Request aborted.)
    django网站自带CSRF校验,所以jmeter直接请求时会出现校验不通过的情况一、CSRF校验CSRF是指跨站请求伪造,CSRF攻击的流程大概是我们登录网站A后存在本地的cookie,之后打开了另一个危险网站B,这个网站B使用本地cookie向网站A发起请求(该请求不是用户主动发起,是个恶意请求),网站A误以为是......
  • uva 10034(最小生成树)
    题目:InanepisodeoftheDickVanDykeshow,littleRichieconnectsthefrecklesonhisDad'sbacktoformapictureoftheLibertyBell.Alas,oneofthefrecklesturnsouttobeascar,sohisRipley'sengagementfallsthrough.ConsiderDick......
  • 修改xampp中的mysql的密码报错,ERROR 1348 (HY000): Column 'Password' is not updatab
    xampp中的mysql(MariaDB)默认密码为空,进入mysql的bin目录,输入mysql-uroot-p,回车,无密码登录:查看所有数据库,选择mysql数据库:showdatabases;usemysql;使用update语句修改密码报错:ERROR1348(HY000):Column‘Password’isnotupdatable使用如下命令修改密码,并没有效果:使......