ES6新特性之字符串的扩展实例分析


Posted in Javascript onApril 01, 2017

本文实例讲述了ES6新特性之字符串的扩展。分享给大家供大家参考,具体如下:

一、ES5字符串函数

concat: 将两个或多个字符的文本组合起来,返回一个新的字符串。
indexOf: 返回字符串中一个子串第一处出现的索引(从左到右搜索)。如果没有匹配项,返回 -1 。
charAt: 返回指定位置的字符。
lastIndexOf: 返回字符串中一个子串最后一处出现的索引(从右到左搜索),如果没有匹配项,返回 -1 。
match: 检查一个字符串匹配一个正则表达式内容,如果么有匹配返回 null。
substring: 返回字符串的一个子串,传入参数是起始位置和结束位置。
substr: 返回字符串的一个子串,传入参数是起始位置和长度
replace: 用来查找匹配一个正则表达式的字符串,然后使用新字符串代替匹配的字符串。
search: 执行一个正则表达式匹配查找。如果查找成功,返回字符串中匹配的索引值。否则返回 -1 。
slice: 提取字符串的一部分,并返回一个新字符串(与 substring 相同)。
split: 通过将字符串划分成子串,将一个字符串做成一个字符串数组。
length: 返回字符串的长度,所谓字符串的长度是指其包含的字符的个数。
toLowerCase: 将整个字符串转成小写字母。
toUpperCase: 将整个字符串转成大写字母。

二、ES6新增常用函数

传统上,JavaScript只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6又提供了三种新方法。

includes():返回布尔值,表示是否找到了参数字符串。
startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。
endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。

var s = 'Hello world!';
s.startsWith('Hello') // true
s.endsWith('!') // true
s.includes('o') // true

repeat(): 返回一个新字符串,表示将原字符串重复n次。

'x'.repeat(3) // "xxx"
'hello'.repeat(2) // "hellohello"
'na'.repeat(0) // ""
'na'.repeat(2.9) // "nana"
'na'.repeat(Infinity)// RangeError
'na'.repeat(-1)// RangeError
'na'.repeat(-0.9) // ""

参数如果是小数,会被取整(向下取整)。
参数是负数或者Infinity,会报错。
参数是0到-1之间的小数,则等同于0,这是因为会先进行取整运算。0到-1之间的小数,取整以后等于-0,repeat视同为0。
参数NaN等同于0。

ES7推出了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart用于头部补全,padEnd用于尾部补全。padStart和padEnd一共接受两个参数,第一个参数用来指定字符串的最小长度,第二个参数是用来补全的字符串。

'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'

如果原字符串的长度,等于或大于指定的最小长度,则返回原字符串。

如果用来补全的字符串与原字符串,两者的长度之和超过了指定的最小长度,则会截去超出位数的补全字符串。

如果省略第二个参数,则会用空格补全长度。

三、模板字符串

1. 多行字符串

传统的JavaScript语言,输出模板通常是这样写的。

$('#result').append(
  'There are <b>' + basket.count + '</b> ' +
  'items in your basket, ' +
  '<em>' + basket.onSale +
  '</em> are on sale!'
);

上面这种写法相当繁琐不方便,ES6引入了模板字符串解决这个问题。

$('#result').append(`
  There are <b>${basket.count}</b> items
   in your basket, <em>${basket.onSale}</em>
  are on sale!
`);

模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。

如果使用模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之中。

2.嵌入变量

模板字符串中嵌入变量,需要将变量名写在${}之中。

// 字符串中嵌入变量
var name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`

3.调用函数

模板字符串之中还能调用函数。

function fn() {
 return "Hello World";
}
`foo ${fn()} bar`
// foo Hello World bar

如果大括号中的值不是字符串,将按照一般的规则转为字符串。比如,大括号中是一个对象,将默认调用对象的toString方法。

如果模板字符串中的变量没有声明,将报错。

如果大括号内部是一个字符串,将会原样输出。

`Hello ${'World'}`
// "Hello World"

希望本文所述对大家ECMAScript程序设计有所帮助。

Javascript 相关文章推荐
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
May 19 Javascript
B/S模式项目中常用的javascript汇总
Dec 17 Javascript
JavaScript判断是否为数组的3种方法及效率比较
Apr 01 Javascript
input点击后placeholder中的提示消息消失
Jan 15 Javascript
深入理解js promise chain
May 05 Javascript
jQuery 判断是否包含在数组中Array[]的方法
Aug 03 Javascript
什么是JavaScript注入攻击?
Sep 14 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
Jun 22 Javascript
详解Angular5/Angular6项目如何添加热更新(HMR)功能
Oct 10 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
Mar 13 jQuery
一些你可能不熟悉的JS知识点总结
Mar 15 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
Jun 03 Javascript
Vue.js实战之利用vue-router实现跳转页面
Apr 01 #Javascript
ES6新特性之函数的扩展实例详解
Apr 01 #Javascript
vue-cli的webpack模板项目配置文件分析
Apr 01 #Javascript
ES6新特性之模块Module用法详解
Apr 01 #Javascript
Vue.js实战之组件之间的数据传递
Apr 01 #Javascript
ES6新特性之解构、参数、模块和记号用法示例
Apr 01 #Javascript
jQuery UI Grid 模态框中的表格实例代码
Apr 01 #jQuery
You might like
php 文章调用类代码
2011/08/11 PHP
for循环连续求和、九九乘法表代码
2012/02/20 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
共享自己写一个框架DreamScript
2007/01/20 Javascript
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
2014/03/18 NodeJs
JS实现倒计时和文字滚动的效果实例
2014/10/29 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
js如何改变文章的字体大小
2016/01/08 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
在 Angular 中实现搜索关键字高亮示例
2017/03/21 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
Python中pygal绘制雷达图代码分享
2017/12/07 Python
单链表反转python实现代码示例
2018/02/08 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
2018/04/18 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2016/01/06 面试题
大学毕业生文采飞扬的自我鉴定
2013/12/03 职场文书
高一历史教学反思
2014/01/13 职场文书
药剂专业求职信
2014/06/20 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
终止劳动合同证明书样本
2014/11/19 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
工程进度款催款函
2015/06/24 职场文书
欠条样本
2015/07/03 职场文书
会议简报格式范文
2015/07/20 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
亲情作文之母爱
2019/09/25 职场文书
docker 制作mysql镜像并自动安装
2022/05/20 Servers