常常会用到的截取字符串substr()、substring()、slice()方法详解


Posted in Javascript onDecember 16, 2015

slice()

定义:接受一个或者两个参数,第一个参数指定子字符串的开始位置。第二个参数表示子字符串的结束位置(不包括结束位置的那个字符),如果没有传递第二个参数,则将字符串的长度作为结束位置。

1、传递参数为正值情况:

var str ="helloWorld";

// 一个参数,则将字符串长度作为结束位置
alert(str.slice(3)); // "loWorld"

// 两个参数,7位置上的字符为"r",但不包括结束位置的字符
alert(str.slice(3,7)); // "loWo"

2、传递参数为负值的情况:

slice()方法会将传入的负值与字符串长度相加。

var str ="helloWorld";

// 一个参数,与字符串长度相加即为slice(7)
alert(str.slice(-3)); // "rld"

// 两个参数,与字符串长度相加即为slice(3,6)
alert(str.slice(3,-4)); // "loW"

3、第二个参数比第一个参数值小的情况:

slice()方法传入的第二个参数比第一个参数小的话,则返回空字符串。

var str ="helloWorld";
alert(str.slice(5,3)); // ""

4、IE兼容性

在IE8浏览器测试下,没啥问题,行为与现代浏览器一致。

substring()

定义:接受一个或者两个参数,第一个参数指定子字符串的开始位置。第二个参数表示子字符串的结束位置(不包括结束位置的那个字符),如果没有传递第二个参数,则将字符串的长度作为结束位置。

1、传递参数为正值情况:与slice()方法行为相同的

var str ="helloWorld";

// 一个参数,则将字符串长度作为结束位置
alert(str.substring(3)); // "loWorld"

// 两个参数,7位置上的字符为"r",但不包括结束位置的字符
alert(str.substring(3,7)); // "loWo"

2、传递参数为负值的情况:

substring()方法会把所有负值参数转换为0。来看下例子:

var str ="helloWorld";

// 两个参数,-4会转换为0,相当于substring(3,0) -->即为 substring(0,3)
alert(str.substring(3,-4)); // "hel"

substring()方法会将较小的数作为开始位置,将较大的数作为结束位置。如上面的例子substring(3,0) 与substring(0,3)是一样效果的。

4、IE兼容性

在IE8浏览器测试下,没啥问题,行为与现代浏览器一致。

substr()

定义:接受一个或者两个参数,第一个参数指定子字符串的开始位置。第二个参数跟之前的方法有些区别,表示返回的字符个数。如果没有传递第二个参数,则将字符串的长度作为结束位置。来看例子:

1、传递参数为正值情况:

var str ="helloWorld";

// 一个参数,则将字符串长度作为结束位置
alert(str.substr(3)); // "loWorld"

// 两个参数,从位置3开始截取后面7个字符
alert(str.substr(3,7)); // "loWorld"

2、传递参数为负值的情况:

substr()方法会将负的第一个参数加上字符串的长度,而将负的第二个参数转换为0。

var str ="helloWorld";

// 将第一个负的参数加上字符串的长度--->
//即为:substr(7,5) ,从位置7开始向后截取5个字符
alert(str.substr(-3,5)); // "rld"

// 将第二个参数转换为0
// 即为:substr(3,0),即从位置3截取0个字符串,则返回空
alert(str.substr(3,-2)); // ""

3、IE兼容性

substr()方法传递负值的情况下会存在问题,会返回原始的字符串。IE9修复了此问题。

总结

在传递正值参数情况下,slice() 和 substring () 行为是一致的,substr()方法在第二个参数上会容易混淆

在传递负值参数情况下,slice() 方法是通过字符串长度相加,符合一般思维,substring()第二个参数转换为0会容易出问题,起始位置会容易变更,

substr() 方法负值情况下会出现IE兼容性问题。

综上,小弟一般推荐使用slice()方法。

Javascript 相关文章推荐
JavaScript实现控制打开文件另存为对话框的方法
Apr 17 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
Jan 27 Javascript
JavaScript进阶练习及简单实例分析
Jun 03 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
Dec 24 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
Apr 07 Javascript
AngularJS自定义指令之复制指令实现方法
May 18 Javascript
JS点击缩略图整屏居中放大图片效果
Jul 04 Javascript
Vue 2.0学习笔记之Vue中的computed属性
Oct 16 Javascript
微信小程序云开发之使用云数据库
May 17 Javascript
微信小程序如何自定义table组件
Jun 29 Javascript
js实现小星星游戏
Mar 23 Javascript
JS中FileReader类实现文件上传及时预览功能
Mar 27 Javascript
jQuery添加和删除指定标签的方法
Dec 16 #Javascript
详解JavaScript基于面向对象之继承实例
Dec 16 #Javascript
javascript实现拖放效果
Dec 16 #Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
Dec 15 #Javascript
Jquery插件easyUi实现表单验证示例
Dec 15 #Javascript
解决WordPress使用CDN后博文无法评论的错误
Dec 15 #Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
Dec 15 #Javascript
You might like
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
js的一些常用方法小结
2011/06/29 Javascript
jQuery随机切换图片的小例子
2013/04/18 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
javascript等号运算符使用详解
2015/04/16 Javascript
微信小程序-详解数据缓存
2016/11/24 Javascript
AngularJS 中ui-view传参的实例详解
2017/08/25 Javascript
vue-cli配置文件——config篇
2018/01/04 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
使用webpack搭建pixi.js开发环境
2020/02/12 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
如何在Python中编写并发程序
2016/02/27 Python
python list排序的两种方法及实例讲解
2017/03/20 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
python颜色随机生成器的实例代码
2020/01/10 Python
python十进制转二进制的详解
2020/02/07 Python
怎么快速自学python
2020/06/22 Python
如何使用Pytorch搭建模型
2020/10/26 Python
应届生煤化工求职信
2013/10/21 职场文书
工程力学硕士生的自我评价范文
2013/11/16 职场文书
2014年领导班子工作总结
2014/12/11 职场文书
唐山大地震的观后感
2015/06/05 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书
Python几种酷炫的进度条的方式
2022/04/11 Python
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript
CSS浮动引起的高度塌陷问题
2022/08/05 HTML / CSS