常常会用到的截取字符串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获取textarea中的光标位置
May 06 Javascript
JS解决url传值出现中文乱码的另类办法
Apr 08 Javascript
js利用数组length属性清空和截短数组的小例子
Jan 15 Javascript
百度移动版的url编码解码示例
Apr 29 Javascript
SuperSlide标签切换、焦点图多种组合插件
Mar 14 Javascript
利用JS生成博文目录及CSS定制博客
Feb 10 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
Mar 25 Javascript
Jquery对新插入的节点 绑定Click事件失效的解决方法
Jun 02 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
Oct 17 Javascript
Bootstrap标签页(Tab)插件使用方法
Mar 21 Javascript
vue组件实现可搜索下拉框扩展
Oct 23 Javascript
vue 通过绑定事件获取当前行的id操作
Jul 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
PHPMailer安装方法及简单实例
2008/11/25 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
php中curl使用指南
2015/02/05 PHP
php 解析xml 的四种方法详细介绍
2016/10/26 PHP
Smarty模板配置实例简析
2019/07/20 PHP
javascript的数据类型、字面量、变量介绍
2012/05/23 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
浅谈js函数的多种定义方法与区别
2016/11/29 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
Node.js笔记之process模块解读
2018/05/31 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
2018/09/12 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
Vue双向数据绑定(MVVM)的原理
2020/10/03 Javascript
react+antd 递归实现树状目录操作
2020/11/02 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
python处理cookie详解
2014/02/07 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
python利用ffmpeg进行录制屏幕的方法
2019/01/10 Python
pytorch 共享参数的示例
2019/08/17 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
Python sorted对list和dict排序
2020/06/09 Python
python os.rename实例用法详解
2020/12/06 Python
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
美国知名的家庭连锁百货商店:Boscov’s
2017/07/27 全球购物
伊莱克斯阿根廷网上商店:Tienda Electrolux
2021/03/08 全球购物
采购部部门职责
2013/12/15 职场文书
长辈证婚人证婚词
2014/01/09 职场文书
区优秀教师事迹材料
2014/02/10 职场文书
2014年大学生就业规划书
2014/04/04 职场文书
企业金融服务方案
2014/06/03 职场文书
死亡证明书样本说明
2014/10/18 职场文书
实习生辞职信范文
2015/03/02 职场文书
银行实习推荐信
2015/03/27 职场文书