常常会用到的截取字符串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 相关文章推荐
Mootools 1.2教程 正则表达式
Sep 15 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
Oct 06 Javascript
JS链式调用的实现方法
Mar 07 Javascript
JS 修改URL参数(实现代码)
Jul 08 Javascript
js渐变显示渐变消失示例代码
Aug 01 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
Nov 23 Javascript
JavaScript学习笔记之定时器
Jan 22 Javascript
jQuery在线选座位插件seat-charts特效代码分享
Aug 27 Javascript
jQuery实现弹出带遮罩层的居中浮动窗口效果
Sep 12 Javascript
jQuery实现的模拟弹出窗口功能示例
Nov 24 Javascript
详解JavaScript树结构
Jan 09 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
Jan 17 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
PHP可变函数的使用详解
2013/06/14 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
php基于单例模式封装mysql类完整实例
2016/10/18 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
详解CSS样式中的 !important * _ 符号
2021/03/09 HTML / CSS
javascript编程起步(第四课)
2007/01/10 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
2014/01/13 Javascript
当前流行的JavaScript代码风格指南
2014/09/10 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
angularjs学习笔记之双向数据绑定
2015/09/26 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
bootstrap下拉菜单使用方法解析
2017/01/13 Javascript
几种tab切换详解
2017/02/03 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
详解webpack+angular2开发环境搭建
2017/06/28 Javascript
使用D3.js制作图表详解
2017/08/13 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
2020/04/30 jQuery
js+css实现扇形导航效果
2020/08/18 Javascript
Python Web框架Pylons中使用MongoDB的例子
2013/12/03 Python
进一步理解Python中的函数编程
2015/04/13 Python
使用70行Python代码实现一个递归下降解析器的教程
2015/04/17 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
python3 循环读取excel文件并写入json操作
2020/07/14 Python
工程项目建议书范文
2014/03/12 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python
MySQL创建管理子分区
2022/04/13 MySQL