常常会用到的截取字符串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多重继承示例
Mar 13 Javascript
Cookie 小记
Apr 01 Javascript
javascript 函数使用说明
Apr 07 Javascript
jQuery拖拽div实现思路
Feb 19 Javascript
jQuery获取字符串中出现最多的数
Feb 22 Javascript
跨域资源共享 CORS 详解
Apr 26 Javascript
angular中的http拦截器Interceptors的实现
Feb 21 Javascript
Angular17之Angular自定义指令详解
Jan 21 Javascript
微信小程序实现发红包功能
Jul 11 Javascript
jQuery 点击获取验证码按钮及倒计时功能
Sep 20 jQuery
React+Redux实现简单的待办事项列表ToDoList
Sep 29 Javascript
jQuery HTML css()方法与css类实例详解
May 20 jQuery
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
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
php post json参数的传递和接收处理方法
2018/05/31 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
javascript 主动派发事件总结
2011/08/09 Javascript
Jquery异步请求数据实例代码
2011/12/28 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
javascript实现导航栏分页效果
2019/06/27 Javascript
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
[02:56]DOTA2英雄基础教程 巨魔战将
2013/12/10 DOTA
python中的字典详细介绍
2014/09/18 Python
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
深入解析Python中的__builtins__内建对象
2016/06/21 Python
Python多层装饰器用法实例分析
2018/02/09 Python
python爬取指定微信公众号文章
2018/12/20 Python
Jupyter notebook 远程配置及SSL加密教程
2020/04/14 Python
python定义类的简单用法
2020/07/24 Python
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
祖国在我心中演讲稿200字
2014/08/28 职场文书
公司试用期员工自我评价
2014/09/17 职场文书
工商局副局长个人对照检查材料
2014/09/25 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
2014全年工作总结
2014/11/27 职场文书
商务代表岗位职责
2015/02/15 职场文书
小学少先队活动总结
2015/05/08 职场文书
工作感言一句话
2015/08/01 职场文书
创业计划书之酒店
2019/08/30 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
golang switch语句的灵活写法介绍
2021/05/06 Golang
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android