深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性


Posted in Javascript onDecember 16, 2015

在截取字符串时常常会用到substr()、substring()、slice()方法,有时混淆之间的用法,故总结下。

阅读目录
•slice()
•substring()
•substr()
•总结 

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()方法。

下面给大家介绍slice,substr和substring的区别

首先,他们都接收两个参数,slice和substring接收的是起始位置和结束位置(不包括结束位置),而substr接收的则是起始位置和所要返回的字符串长度。直接看下面例子:

var test = 'hello world';
  alert(test.slice(,));    //o w
  alert(test.substring(,));   //o w
  alert(test.substr(,));   //o world

这里有个需要注意的地方就是:substring是以两个参数中较小一个作为起始位置,较大的参数作为结束位置。

如:

alert(test.substring(7,4));   //o w

接着,当接收的参数是负数时,slice会将它字符串的长度与对应的负数相加,结果作为参数;substr则仅仅是将第一个参数与字符串长度相加后的结果作为第一个参数;substring则干脆将负参数都直接转换为0。测试代码如下:

var test = 'hello world';  
alert(test.slice(-));   //rld  
alert(test.substring(-));  //hello world  
alert(test.substr(-));  //rld  
alert(test.slice(,-));  //lo w  
alert(test.substring(,-)); //hel  
alert(test.substr(,-));  //空字符串

 注意:IE对substr接收负值的处理有错,它会返回原始字符串。

Javascript 相关文章推荐
IE event.srcElement和FF event.target 功能比较
Mar 01 Javascript
Javascript学习笔记二 之 变量
Dec 15 Javascript
Jquery同辈元素选中/未选中效果的实例代码
Aug 01 Javascript
jquery获取div距离窗口和父级dv的距离示例
Oct 10 Javascript
Javascript核心读书有感之类型、值和变量
Feb 11 Javascript
JavaScript数据结构与算法之栈与队列
Jan 29 Javascript
详解JavaScript表单验证(E-mail 验证)
Mar 31 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
Dec 14 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
Dec 20 jQuery
Jquery属性的获取/设置及样式添加/删除操作技巧分析
Dec 23 jQuery
浅谈javascript事件环微任务和宏任务队列原理
Sep 12 Javascript
ES11屡试不爽的新特性,你用上了几个
Oct 21 Javascript
js如何判断输入字符串长度
Dec 16 #Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
Dec 16 #Javascript
jQuery添加和删除指定标签的方法
Dec 16 #Javascript
详解JavaScript基于面向对象之继承实例
Dec 16 #Javascript
javascript实现拖放效果
Dec 16 #Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
Dec 15 #Javascript
Jquery插件easyUi实现表单验证示例
Dec 15 #Javascript
You might like
PHP 简单数组排序实现代码
2009/08/05 PHP
php UBB 解析实现代码
2011/11/27 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
window.showModalDialog()返回值的学习心得总结
2014/01/07 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
javascript使用数组的push方法完成快速排序
2014/09/15 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
js获取当前日期时间及其它日期操作汇总
2016/03/08 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
js格式化时间的简单实例
2016/11/27 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
Python中的字典与成员运算符初步探究
2015/10/13 Python
利用Python读取文件的四种不同方法比对
2017/05/18 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
python实现数据库跨服务器迁移
2018/04/12 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
Python字符串的常见操作实例小结
2019/04/08 Python
pip指定python位置安装软件包的方法
2019/07/12 Python
python如何使用Redis构建分布式锁
2020/01/16 Python
碧欧泉法国官网:Biotherm法国
2019/10/23 全球购物
主管职责范文
2013/11/09 职场文书
人事专员岗位职责
2013/11/20 职场文书
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书
趣味运动会开幕词
2015/01/28 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
超市员工管理制度
2015/08/06 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
win sever 2022如何占用操作主机角色
2022/06/25 Servers