常常会用到的截取字符串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对象的支持
Jul 25 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
Jun 07 Javascript
javascript实现表格增删改操作实例详解
May 15 Javascript
详解JavaScript的变量和数据类型
Nov 27 Javascript
深入浅析JS的数组遍历方法(推荐)
Jun 15 Javascript
Bootstrap Navbar Component实现响应式导航
Oct 08 Javascript
js实现单张图片平移切换效果
Oct 11 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
Nov 09 Javascript
ES6使用export和import实现模块化的方法
Sep 10 Javascript
学前端,css与javascript重难点浅析
Jun 11 Javascript
浅谈JavaScript中this的指向更改
Jul 28 Javascript
Vue常用API、高级API的相关总结
Feb 02 Vue.js
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中ini_set和ini_get函数的用法小结
2014/02/18 PHP
PHP把小数转成整数3种方法
2014/06/30 PHP
php将一维数组转换为每3个连续值组成的二维数组
2016/05/06 PHP
利用PHP将图片转换成base64编码的实现方法
2016/09/13 PHP
PHP新特性之字节码缓存和内置服务器
2017/08/11 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
详解AngularJS过滤器的使用
2016/03/11 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
JavaScript中原型链存在的问题解析
2016/09/25 Javascript
微信小程序 textarea 详解及简单使用方法
2016/12/05 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
js实现for循环跳过undefined值示例
2019/07/02 Javascript
vue-cli3.X快速创建项目的方法步骤
2019/11/14 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
Python 字典(Dictionary)操作详解
2014/03/11 Python
Python入门学习之字符串与比较运算符
2015/10/12 Python
深入理解python中的atexit模块
2017/03/07 Python
Python实现的密码强度检测器示例
2017/08/23 Python
彻底搞懂Python字符编码
2018/01/23 Python
Python实现求一个集合所有子集的示例
2018/05/04 Python
对python For 循环的三种遍历方式解析
2019/02/01 Python
PyCharm 创建指定版本的 Django(超详图解教程)
2019/06/18 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
利用Storage Event实现页面间通信的示例代码
2018/07/26 HTML / CSS
美国知名的隐形眼镜电商:Contacts America
2019/11/19 全球购物
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
经贸韩语专业大学生职业规划
2014/02/14 职场文书
坚守艰苦奋斗精神坚决反对享乐主义整改措施
2014/09/17 职场文书
工作年限证明模板
2014/11/01 职场文书
中秋节作文(五年级)之关于月亮
2019/09/11 职场文书
windows11怎么查看wifi密码? win11查看wifi密码的技巧
2021/11/21 数码科技