好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

ES6+ 模版字符串

ES6+ 模版字符串

1. 前言

ES6 对字符串进行了扩展,使之更具有表达力,在 ES5 中字符串的 功能 是很单一,只能定义变量,不能在字符串中进行逻辑运算,只能使用 + 通过拼接的方式实现。另外,字符串的拼接和换行都需要借助 + 和 \n 才能实现,很麻烦更容易出错。这无疑限制了我们对字符串的操作。ES6 对 ES5 中存在的问题进行了修复和扩充,本节我们来学习 ES6 中的模版字符串语法,在本节你可以了解一下 内容 :

字符串换行; 字符串拼接; 字符串中包含逻辑运算; 带 标签 的模版字符串。

下面我们先来看看在 ES5 中字符串都是哪些使用场景,从而更好地对比 ES6 所提供的模版字符串到底有什么好处, 解决 了那些问题。

2. ES5 中的字符串

我们知道在 ES5 中定义 一个 字符串时会把字符串放入引号里,使用 '' (单引号)或 "" (双引号)来包裹字符串。而对于多个字符串的拼接则需要使用 + (加号运算符) 来实现多个字符串的连接。

  var  a  =   'imooc'  ; 
 var  b  =   ; 
console .  log  (  'a的值是:'   +  a  +   'b的值是:'   +  b )  ; 
 // a的值是:1b的值是:2 
 

可以看到在 ES5 中字符串的拼接是比较麻烦的,在 ES5 中字符串还有一种拼接场景 —— 多行拼接,需要使用换行符 \n 和 + 组合实现。看下面的例子:

  var  str  =   '第一行 内容 \n'   + 
 '第二行 内容 \n'   +  
 '第三行 内容 \n'  ; 
console .  log  ( str )  ; 
 /**
第一行 内容 
第二行 内容  
第三行 内容 
*/ 
 

上面的 代码 拼接了多行文本字符串,可以看出来如果是很多行的话,很容易出错,而在 web 开发的早期没有模版概念的时候, 数据,然后组装成 DOM 结构插入到 页面 中,其中还涉及到传递变量的问题,下面看 一个 插入 DOM 的示例:

@H_ 502 _137@ < div id = " imooc " > </ div > < script type = " text/javascript " > let lang = 'ES6' ; document . getElementById ( 'imooc' ) . innerHTML = '<h1>网' + lang + ' Wiki</h1>' + '<p>这里是网Wiki,未经许可不能转载</p>' + '<div>Wiki主要 内容 内容 </div>' ; </ script >

上面的 代码 就是在早期 web 开发中经常使用的场景,可以看出在拼接时稍有不慎就会出现拼接 错误 ,这也造成了问题排查的难度。

ES6 为了 解决 以上问题提出了模版字符串的概念,那么下面我们看看模版字符串是怎么 解决 这些问题的。

3. 模版字符串的使用

有了模版字符串后就不需要使用加号了,通过使用 ````(反引号)中直接定义多行字符串和变量的拼接。如果是变量就包裹在 ${} 的大括号中。另外,在模版字符串中还可以使用表达式和使用 函数 标签 的方式来 增加 字符串复杂的 功能 ,扩展了字符串的 功能 。下面我们来看一下模版字符串都有哪些使用场景。

3.1 字符串拼接

在 ES6 中可以使用反引号来声明 一个 字符变量的值。

  let  name  =    `imooc`   ; 
 

上面例子中我们知道在 ES5 中拼接字符串需要用 + 运算符,但在 ES6 中把字符串写在 ```` 中,如果字符串中有变量可以使用 ${} 把变量放在大括号中。如下实例:

  var  name  =   '网'  ; 
 var  lang  =   'ES6'  ; 
console .  log  (   `这是   ${ name }   的   ${ lang }   教程!`   )  ; 
 // 这是网的ES6教程! 
 

上面的 代码 中把变量写在 ${} 的大括号中,在编译的过程会直接替换对应的变量。这种方式很明了地表达了字符串的完整性,更加直观地表达字符串的含义。

3.2 多行字符串

使用 ES6 的模版字符串时,不需要 添加 换行符,反引号里的 内容 就是最后结果的直观表达,下面我们看一下上面插入 DOM 的例子使用 ES6 是如何写的。

@H_ 502 _137@ < div id = " imooc " > </ div > < script type = " text/javascript " > let lang = 'ES6' ; document . getElementById ( 'imooc' ) . innerHTML = `<h1>网 ${ lang } Wiki</h1> <p>这里是网Wiki,未经许可不能转载</p> <div>Wiki主要 内容 </div>` ; </ script >

对上述 DOM 进行插入操作,在有变量的地方把变量直接放入 ${} 大括号中即可。

3.3 逻辑运算

有时候需要对变量进行计算或是根据 添加 进行判断得到不同场景下的字符串,ES5 的做法很笨也是只能通过 + 的方式连接,要么是计算好了然后再连接,这无疑都是很麻烦的,下面看 一个 求和例子:

  var  a  =   ; 
 var  b  =   ; 
 // ES5 
console .  log  (  'a + b 的和是: '   +   ( a  +  b )  )  ;     // a + b 的和是: 3 
 // ES6 
console .  log  (   `a + b 的和是:    ${ a  +  b }   `   )  ;       // a + b 的和是: 3 
 var  age  =   ; 
console .  log  (   `小明是   ${ age  >    ?   '成年人'   :   '未成年人'  }   `   ) 
 // 小明是未成年人 
 

在上面例子的目标字符串中,可以在 ${} 占位符中直接书写表达式。

3.4 带 标签 的模版字符串

带 标签 的模版字符串类似 函数 的使用,如果我们想在字符串中做一些复杂的逻辑判断,下面先看一下 ES5 的例子:

  var  age  =   ; 
 var  str  =   '' 
 if   ( age  >   )   { 
  str  =  age  +   '岁成年了'  ; 
 }   else   { 
  str  =  age  +   '岁还未成年'  ; 
 } 
console .  log  (  'imooc今年'   +  str )  ;   // imooc今年7岁还未成年 
 

上面的 代码 是根据年龄判断是否成年了,ES5 方式很简单,就是一步一步地拼装数据,ES6 提供了带 标签 的模板字符串,它的使用方式如下:

  function   isAdult  ( strArr ,  age )   { 
   var  s1  =  strArr [  ]  ;   // strArr是字符串被变量分割后的数组 
   var  str  =   '' 
   if   ( age  >   )   { 
    str  =  age  +   '岁成年了'  ; 
   }   else   { 
    str  =  age  +   '岁还未成年'  ; 
   } 
   return    `   ${ s1 }    ${ str }   `   ; 
 } 
 var  test  =  isAdult  `imooc今年   ${ age }   `  
console .  log  ( test )  ;      // imooc今年7岁还未成年 
 

带 标签 的模板字符串可以把模版字符串的 内容 作为参数传到 函数 中,使用方式和 函数 的 调用 略有不同 fn${expression} 函数 fn 会接收后面表达式作为参数,第 一个 参数是表达式中所有字符串组成的数组,第二个以后的参数是表达式中的变量的值,和变量是一一对应的。

4. 小结

本节通过 ES5 的字符串拼接中存在各种问题和繁琐性,引入了为什么 ES6 会有字符串模版的概念,总结字符串模版的使用有以下几点:

可以对字符串进行拼接和多行字符串的处理; 模板字符串中可以包含表达式,也可以进行逻辑运算; 带 标签 的模板字符串可以把模板字符串的 内容 当作参数传递到 函数 中,进行复杂的逻辑。

查看更多关于ES6+ 模版字符串的详细内容...

  阅读:52次

上一篇

下一篇

第1节:ES6+ 简介    第2节:ES6 环境配置    第3节:ES6+ let    第4节:ES6+ const    第5节:ES6+ 展开语法    第6节:ES6+ 剩余参数    第7节:ES6+ 解构赋值    第8节:ES6+ 模版字符串    第9节:ES6+ 箭头函数    第10节:ES6+ 数值扩展    第11节:ES6+ isFinite()&isNaN()    第12节:ES6+ Number 对象的方法    第13节:ES6+ Math 对象的扩展    第14节:ES6+ includes()    第15节:ES6+ 字符串的扩展    第16节:ES6+ startsWith()    第17节:ES6+ endsWith()    第18节:ES6+ repeat()    第19节:ES6+ padStart()    第20节:ES6+ padEnd()    第21节:ES6+ trim()    第22节:ES6+ Array.from()    第23节:ES6+ of()    第24节:ES6+ find()和findIndex()    第25节:ES6+ copyWithin()    第26节:ES6+ fill()    第27节:ES6+ isArray()    第28节:ES6+ 对象的扩展    第29节:ES6+ flat()    第30节:ES6+ 可选链操作符    第31节:ES6+ Object.is()    第32节:ES6+ Object.assign()    第33节:ES6+ Object.keys()    第34节:ES6+ Object.values()    第35节:ES6+ Object.entries()    第36节:ES6+ 数据结构扩展    第37节:ES6+ Set    第38节:ES6+ WeakSet    第39节:ES6+ Map    第40节:ES6+ WeakMap    第41节:ES6+ Symbol    第42节:ES6+ for...of    第43节:ES6+ 迭代协议    第44节:ES6+ 实现一个简版的 Promise    第45节:ES6+ Promise 基础    第46节:ES6+ Promise 进阶    第47节:ES6+ Generator 基础    第48节:ES6+ Generator 函数应用    第49节:ES6+ async/await    第50节:ES6+ Class 前置知识    第51节:ES6+ Class    第52节:ES6+ Proxy    第53节:ES6+ Reflect(一)    第54节:ES6+ Reflect(二)    第55节:ES6+ 模块化(一)    第56节:ES6+ 模块化(二)    第57节:ES6实战1-实现Vue3 reactive 源码    第58节:ES6实战2-实现 Vue3 effect 源码    第59节:ES6 实战2-封装请求    第60节:ES6+ 实战3-代码整洁之道    第61节:ES6 Map原理分析    第62节:ES6module语法加载importexport    第63节:ES6的循环与可迭代对象示例详解