前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【ES6基础】模板字符串(Template String)

【ES6基础】模板字符串(Template String)

作者头像
前端达人
发布2019-05-06 11:05:56
5040
发布2019-05-06 11:05:56
举报
文章被收录于专栏:前端达人前端达人前端达人

开篇

模板字符串是ES6中非常重要的一个新特性,这个特性使得我们处理相关业务变得更加容易。比如在处理嵌入表达式、多行字符串、字符串中插入变量、字符串格式化等方面的应用。模板字符串使用反钩号(backticks,`),而不是单引号或双引号。以下是个简单的示例:

let str1 = `hello!!!`; //template string
let str2 = "hello!!!";
console.log(str1 === str2); //output "true”

今天的文章将从以下几个方面进行介绍:

  • 表达式
  • 标签模板字符串(Tagged template literals)
  • 多行字符串
  • 原始字符串(Raw strings)

本篇文章阅读时间预计5分钟

01

表达式

模板字符串的出现,给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"

02

标签模板字符串

首先我们先创建一个标记的模板字符串,使用函数处理模板字符串,如下段代码所示:

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”

使用此方法我们可以创建灵活度更高的模板字符串,接收后台数据渲染我们前端的界面。

03

多行字符串

ES6的模板字符串给我们提供了一种创建多行文本字符串的新方法。在ES6之前我们只能使用"\n“在字符串中进行换行,代码如下:

console.log("1\n2\n3");
//output
//1
//2
//3

在es6中,我们可以直接输入回车进行换行,如下段代码所示:

console.log(`1
2
3`);

模板字符串的方法会在每一行的最后添加"\n"进行换行。

04

原始字符串

原始字符串是一个普通字符串,其中不会解释转义字符。我们可以使用模板字符串创建原始字符串。我们可以使用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开头的任何内容都将被视为十六进制转义
  • 任何以\开头然后跟着一个数字将被视为八进制转义

05

小节

今天的内容就介绍到这里,模板字符串让我们处理字符串更加容易,尤其是我们在渲染前端界面展示数据时,大大减少了代码量,加强了易读性

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端达人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档