ES6(九)—— String

模式冰川
• 阅读 1576

目录

  • Template

    • String Literals(字符串字面量)

      • 字符串换行
      • 包含变量或者表达式
    • Tag Literals(标签字面值)

      • 有逻辑运算
  • 字符串的扩展方法
  • ES6-ES10学习版图

Template

String Literals(字符串字面量)

用来解决字符串拼接问题,从 ES6 开始可以这样定义字符串了。

`string text`

`string text line 1
 string text line 2`

`string text ${expression} string text`

在这里你可以任意插入变量或者表达式,只要用 ${} 包起来就好。

字符串换行

ES5

let html
html = '<div>'+
    '<p>你好啊</p>'+
'</div>'
console.log(html)
//<div><p>你好啊</p></div>

ES6

html = `<div>
    <p>你好啊</p>
</div>`
console.log(html)  
//<div>
//    <p>你好啊</p>
//</div>
包含变量或者表达式

ES5

const a = 20
const b = 10
const c = 'javascript'
const str = 'my age is' + (a + b) + ' i love' + c
console.log(str)
//my age is 30 i love javascript

ES6

const str = `my age is ${a + b} i love ${c}`
console.log(str)
//my age is 30 i love javascript

Tag Literals(标签字面值)

前面的字符串字面量解决了字符串拼接的问题,对于包含复杂逻辑的字符串并不是简单的表达式能搞定的。所以需要另一种解决方案:Tag Literals

有逻辑运算

ES5

const retailPrice = 20
const wholeSalePrice = 16
let showText = ''
if (type === 'retail') {
    showText = '您此次购买的单价是:' + retailPrice
} else {
    showText = '您此次购买的批发价是:' + wholeSalePrice
}
console.log(showText)

ES6

  • 第一个参数拿到的数组,空格为分隔符
  • 后面的参数可以根据模板字符串里有的变量获取
  • 可以解决很多的变量输出问题,更安全
  • 可以制作很多模板引擎
const name  = 'tom'
const gender = true
function myTagFuc (string) {
  console.log(string)
  // ["hey, ", " is a ", "", raw: Array(3)]
}

const result = myTagFuc`hey, ${name} is a ${gender}`
// 拿到的结果是模板字符串分割过之后的结果,因为里面可能掺这表达式,所以是个数组

除了数组之外,还可以拿到在模板字符串中所有拿到的表达式返回值 ,上面可以拿到name和gender

const name  = 'tom'
const gender = true
function myTagFuc (string, name, gender) {
  console.log(string) // ["hey, ", " is a ", "", raw: Array(3)]
  console.log(name) // tom
  console.log(gender) // true
}

const result = myTagFuc`hey, ${name} is a ${gender}` 

如果我们函数有返回值,那么会作为整体的模板字符串返回值返回

const name  = 'tom'
const gender = true
function myTagFuc (string, name, gender) {
  return 123
}

const result = myTagFuc`hey, ${name} is a ${gender}`
console.log(result)  // 123

想要原样返回那么在函数内部进行拼装

const name  = 'tom'
const gender = true
function myTagFuc (string, name, gender) {
  const sex = gender ? 'man' : 'woman'
  return string[0] + name + string[1] + sex + string[2]
}

const result = myTagFuc`hey, ${name} is a ${gender}`
console.log(result)
// hey, tom is a man

字符串的扩展方法

  • includes() —— 包含
  • startsWith() —— 起始
  • endsWidth() —— 结尾

相比较正则和indexOf,这种会便捷有很多,这三个都是

  • 第一个参数是字符串str,必传
  • 第二个参数是可选,传起始位置
  • 返回值是boolean,找到了是true,没有找到是false
  • 区分大小写
const message = `Error: foo is not defined.`

console.log(message.startsWith('Error')) // true
console.log(message.endsWith('.')) // true
console.log(message.includes('foo')) // true
console.log(message.includes('foo', 8)) // false

学习版图

ES6(九)—— String

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Karen110 Karen110
4年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
Peter20 Peter20
4年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Wesley13 Wesley13
4年前
ES6学习笔记(3)
参考书《ECMAScript6入门》http://es6.ruanyifeng.com/字符串的扩展ES6之前只能识别\\u0000\\uFFFF之间的字符,超过此范围,识别会出错;ES6弥补了这个错误ES6扩展的新方法codePointAt"𠮷".CodePointAt(0)//返回超过\\u00
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
4年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Stella981 Stella981
4年前
JavaScript常用函数
1\.字符串长度截取functioncutstr(str,len){vartemp,icount0,patrn/^\x00\xff/,strre"";for(vari
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这