常常会用到的截取字符串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翻页效果
Jul 23 Javascript
Javascript Select操作大集合
May 26 Javascript
jQuery+AJAX实现无刷新下拉加载更多
Jul 03 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
Aug 24 Javascript
理解javascript中的严格模式
Feb 01 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
Sep 20 Javascript
微信小程序之滚动视图容器的实现方法
Sep 26 Javascript
vue组件编写之todolist组件实例详解
Jan 22 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
Mar 08 Javascript
JS实现的简单下拉框联动功能示例
May 11 Javascript
原生js实现html手机端城市列表索引选择城市
Jun 24 Javascript
详解Vue.js 响应接口
Jul 04 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
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
浅谈PHP强制类型转换,慎用!
2013/06/06 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
2015/03/17 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
2019/10/15 PHP
简单通用的JS滑动门代码
2008/12/19 Javascript
IE事件对象(The Internet Explorer Event Object)
2012/06/27 Javascript
JQuery异步获取返回值中文乱码的解决方法
2015/01/29 Javascript
15款jQuery分布引导插件分享
2015/02/04 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
jquery使用remove()方法删除指定class子元素
2015/03/26 Javascript
用JS动态改变表单form里的action值属性的两种方法
2016/05/25 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
Bootstrap实现省市区三级联动(亲测可用)
2019/07/26 Javascript
vue ssr服务端渲染(小白解惑)
2019/11/10 Javascript
KnockoutJS数组比较算法实例详解
2019/11/25 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
微信小程序webSocket的使用方法
2020/02/20 Javascript
Python编程实现正则删除命令功能
2017/08/30 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
python可视化篇之流式数据监控的实现
2019/08/07 Python
Python实现转换图片背景颜色代码
2020/04/30 Python
使用SQLAlchemy操作数据库表过程解析
2020/06/10 Python
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
轻金属冶金专业毕业生自荐信
2013/11/02 职场文书
法人授权委托书
2014/04/03 职场文书
党在我心中演讲稿
2014/09/02 职场文书
运动会闭幕式主持词
2015/07/01 职场文书
聘用合同范本
2015/09/21 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android