常常会用到的截取字符串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 相关文章推荐
JS 实现Table相同行的单元格自动合并示例代码
Aug 27 Javascript
javascript数组快速打乱重排的方法
Jan 02 Javascript
jquery删除ID为sNews的tr元素的内容
Apr 10 Javascript
jQuery中index()方法用法实例
Dec 27 Javascript
Bootstrap在线电子商务网站实战项目5
Oct 14 Javascript
简单实现JS上传图片预览功能
Apr 14 Javascript
jQuery设置图片等比例缩小的方法
Apr 29 jQuery
JavaScript 异步调用
Oct 25 Javascript
JavaScript正则表达式函数总结(常用)
Feb 22 Javascript
解决vue组件props传值对象获取不到的问题
Jun 06 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
Jun 06 Javascript
关于vue属性使用和不使用冒号的区别说明
Oct 22 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代码
2016/08/02 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
jQuery Autocomplete自动完成插件
2010/07/17 Javascript
关于JavaScript的with 语句的使用方法
2011/05/09 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
在Google 地图上实现做的标记相连接
2015/01/05 Javascript
javascript连续赋值问题
2015/07/08 Javascript
基于angularJS的表单验证指令介绍
2016/10/21 Javascript
用jQuery实现圆点图片轮播效果
2017/03/19 Javascript
微信小程序 首页制作简单实例
2017/04/07 Javascript
Vue实现百度下拉提示搜索功能
2017/06/21 Javascript
js仿微信抢红包功能
2020/09/25 Javascript
vue2单元测试环境搭建
2018/05/24 Javascript
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
[02:55]2018DOTA2国际邀请赛勇士令状不朽珍藏Ⅲ饰品一览
2018/08/01 DOTA
简单理解Python中的装饰器
2015/07/31 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
python实现字符串中字符分类及个数统计
2018/09/28 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
Python3实现zip分卷压缩过程解析
2019/10/09 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
Python如何解除一个装饰器
2020/08/07 Python
python实现控制台输出颜色
2021/03/02 Python
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
本科生个人求职自荐信
2013/09/26 职场文书
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
2014小学数学教师个人工作总结
2014/12/18 职场文书
预备党员表决心的话
2015/09/22 职场文书
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android
JavaScript实现简单拖拽效果
2021/09/15 Javascript
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js
MySQL 数据 data 基本操作
2022/05/04 MySQL