一、slice()
定义:接受一个或者两个参数,第一个参数指定子字符串的开始位置。第二个参数表示子字符串的结束位置(不包括结束位置的那个字符),如果没有传递第二个参数,则将字符串的长度作为结束位置。
1、传递参数为正值情况:
|
1
2
3
4
5
|
var str
="helloWorld";//
一个参数,则将字符串长度作为结束位置alert(str.slice(3)); //
"loWorld"//
两个参数,7位置上的字符为"r",但不包括结束位置的字符alert(str.slice(3,7)); //
"loWo" |
2、传递参数为负值的情况:
slice()方法会将传入的负值与字符串长度相加。
|
1
2
3
4
5
|
var str
="helloWorld";//
一个参数,与字符串长度相加即为slice(7)alert(str.slice(-3)); //
"rld"//
两个参数,与字符串长度相加即为slice(3,6)alert(str.slice(3,-4)); //
"loW" |
3、第二个参数比第一个参数值小的情况:
slice()方法传入的第二个参数比第一个参数小的话,则返回空字符串。
|
1
2
|
var str
="helloWorld";alert(str.slice(5,3)); //
"" |
4、IE兼容性
在IE8浏览器测试下,没啥问题,行为与现代浏览器一致。
二、substring()
定义:接受一个或者两个参数,第一个参数指定子字符串的开始位置。第二个参数表示子字符串的结束位置(不包括结束位置的那个字符),如果没有传递第二个参数,则将字符串的长度作为结束位置。
1、传递参数为正值情况:与slice()方法行为相同的
|
1
2
3
4
5
|
var str
="helloWorld";//
一个参数,则将字符串长度作为结束位置alert(str.substring(3)); //
"loWorld"//
两个参数,7位置上的字符为"r",但不包括结束位置的字符alert(str.substring(3,7)); //
"loWo" |
2、传递参数为负值的情况:
substring()方法会把所有负值参数转换为0。来看下例子:
|
1
2
3
|
var str
="helloWorld";//
两个参数,-4会转换为0,相当于substring(3,0) -->即为 substring(0,3)alert(str.substring(3,-4)); //
"hel" |
substring()方法会将较小的数作为开始位置,将较大的数作为结束位置。如上面的例子substring(3,0) 与substring(0,3)是一样效果的。
3、IE兼容性
在IE8浏览器测试下,没啥问题,行为与现代浏览器一致。
三、substr()
定义:接受一个或者两个参数,第一个参数指定子字符串的开始位置。第二个参数跟之前的方法有些区别,表示返回的字符个数。如果没有传递第二个参数,则将字符串的长度作为结束位置。来看例子:
1、传递参数为正值情况:
|
1
2
3
4
5
|
var str
="helloWorld";//
一个参数,则将字符串长度作为结束位置alert(str.substr(3)); //
"loWorld"//
两个参数,从位置3开始截取后面7个字符alert(str.substr(3,7)); //
"loWorld" |
2、传递参数为负值的情况:
substr()方法会将负的第一个参数加上字符串的长度,而将负的第二个参数转换为0。
|
1
2
3
4
5
6
7
|
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()
定义:接受一个或者两个参数,第一个参数指定子字符串的开始位置。第二个参数表示子字符串的结束位置(不包括结束位置的那个字符),如果没有传递第二个参数,则将字符串的长度作为结束位置。
1、传递参数为正值情况:
|
1
2
3
4
5
|
var str
="helloWorld";//
一个参数,则将字符串长度作为结束位置alert(str.slice(3)); //
"loWorld"//
两个参数,7位置上的字符为"r",但不包括结束位置的字符alert(str.slice(3,7)); //
"loWo" |
2、传递参数为负值的情况:
slice()方法会将传入的负值与字符串长度相加。
|
1
2
3
4
5
|
var str
="helloWorld";//
一个参数,与字符串长度相加即为slice(7)alert(str.slice(-3)); //
"rld"//
两个参数,与字符串长度相加即为slice(3,6)alert(str.slice(3,-4)); //
"loW" |
3、第二个参数比第一个参数值小的情况:
slice()方法传入的第二个参数比第一个参数小的话,则返回空字符串。
|
1
2
|
var str
="helloWorld";alert(str.slice(5,3)); //
"" |
4、IE兼容性
在IE8浏览器测试下,没啥问题,行为与现代浏览器一致。
二、substring()
定义:接受一个或者两个参数,第一个参数指定子字符串的开始位置。第二个参数表示子字符串的结束位置(不包括结束位置的那个字符),如果没有传递第二个参数,则将字符串的长度作为结束位置。
1、传递参数为正值情况:与slice()方法行为相同的
|
1
2
3
4
5
|
var str
="helloWorld";//
一个参数,则将字符串长度作为结束位置alert(str.substring(3)); //
"loWorld"//
两个参数,7位置上的字符为"r",但不包括结束位置的字符alert(str.substring(3,7)); //
"loWo" |
2、传递参数为负值的情况:
substring()方法会把所有负值参数转换为0。来看下例子:
|
1
2
3
|
var str
="helloWorld";//
两个参数,-4会转换为0,相当于substring(3,0) -->即为 substring(0,3)alert(str.substring(3,-4)); //
"hel" |
substring()方法会将较小的数作为开始位置,将较大的数作为结束位置。如上面的例子substring(3,0) 与substring(0,3)是一样效果的。
3、IE兼容性
在IE8浏览器测试下,没啥问题,行为与现代浏览器一致。
三、substr()
定义:接受一个或者两个参数,第一个参数指定子字符串的开始位置。第二个参数跟之前的方法有些区别,表示返回的字符个数。如果没有传递第二个参数,则将字符串的长度作为结束位置。来看例子:
1、传递参数为正值情况:
|
1
2
3
4
5
|
var str
="helloWorld";//
一个参数,则将字符串长度作为结束位置alert(str.substr(3)); //
"loWorld"//
两个参数,从位置3开始截取后面7个字符alert(str.substr(3,7)); //
"loWorld" |
2、传递参数为负值的情况:
substr()方法会将负的第一个参数加上字符串的长度,而将负的第二个参数转换为0。
|
1
2
3
4
5
6
7
|
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中三种常用的字符串截取方法:slice(), substring() 和 substr() 的使用方式及注意事项,尤其是在处理负数参数时的行为差异,并讨论了它们在不同浏览器中的兼容性。

被折叠的 条评论
为什么被折叠?



