ECMAScript提供了三个基于子字符串创建新字符串的方法:slice()、substring()和substr(),这三个方法斗湖返回被操作字符串的一个子字符串,而且也都接受一或两个参数。那么这三个方法的区别是什么呢?
一、slice()
- 语法:stringObject.slice(start,end)
- 参数:
参数 | 描述 |
---|---|
start | 要抽取的片断的起始下标。如果是负数,则该参数规定的是从字符串的尾部开始算起的位置。也就是说,-1 指字符串的最后一个字符,-2 指倒数第二个字符,以此类推。 |
end | 紧接着要抽取的片段的结尾的下标。若未指定此参数,则要提取的子串包括 start 到原字符串结尾的字符串。如果该参数是负数,那么它规定的是从字符串的尾部开始算起的位置。 |
- 返回值:一个新的字符串。包括字符串 stringObject 从 start 开始(包括 start)到 end 结束(不包括 end)为止的所有字符。
- 例子:
var str = "niu li na"; console.log(str.slice(2,7)); console.log(str);
- 结果:
可以从结果看到,开始的index为2,即从2开始,直到第二个参数-1为止,也就是6,所以返回的是index为2-6的子字符串。slice()方法不会改变原字符串。
那么若是参数中有负数呢?
例子:
var str = "niu li na"; console.log(str.length); console.log(str.slice(-6,7)); console.log(str.slice(2,-5)); console.log(str.slice(-9,-7));
结果:
从结果可知,slice()方法在遇到负的参数的时候,会将这个负值与字符串的长度相加。
那么若是参数1大于参数2呢?
例子:
var str = "niu li na"; console.log(str.slice(7,5));
结果为“”。
二、substring()
- 语法:stringObject.substring(start,end)
- 参数:
参数 | 描述 |
---|---|
start | 必需。一个非负的整数,规定要提取的子串的第一个字符在 stringObject 中的位置。 |
stop |
可选。一个非负的整数,比要提取的子串的最后一个字符在 stringObject 中的位置多 1。 如果省略该参数,那么返回的子串会一直到字符串的结尾。 |
- 返回值:一个新的字符串。包括字符串 stringObject 从 start 开始(包括 start)到 end 结束(不包括 end)为止的所有字符。
- 例子:
var str = "niu li na"; console.log(str.substring(3,7)); console.log(str);
结果:
可以从结果看到,开始的index为3,即从3开始,直到第二个参数-1为止,也就是6,所以返回的是index为3-6的子字符串。substring()方法不会改变原字符串。
那么若是参数中有负数呢?
例子:
var str = "niu li na"; console.log(str.substring(-7,-3)); console.log(str.substring(-5,7)); console.log(str.substring(3,-7));
结果:
从结果可知,substring()方法在遇到负的参数的时候,会将这个负值转化为0。
那么若是参数1大于参数2呢?
例子:
var str = "niu li na"; console.log(str.substring(9,3));
结果:
当参数1大于参数2时,substring()方法会将参数1作为参数2,参数2作为参数1。
三、substr()
- 语法:stringObject.substr(start,length)
- 参数:
参数 | 描述 |
---|---|
start | 必需。要抽取的子串的起始下标。必须是数值。如果是负数,那么该参数声明从字符串的尾部开始算起的位置。也就是说,-1 指字符串中最后一个字符,-2 指倒数第二个字符,以此类推。 |
length | 可选。子串中的字符数。必须是数值。如果省略了该参数,那么返回从 stringObject 的开始位置到结尾的字串。 |
- 返回值:一个新的字符串,包含从 stringObject 的 start(包括 start 所指的字符) 处开始的 length 个字符。如果没有指定 length,那么返回的字符串包含从 start 到 stringObject 的结尾的字符。
- 例子:
var str = "niu li na"; console.log(str.substr(3,4));
结果:
substr()返回从参数1开始的参数2个字符,也就是说从index为3的字符开始,返回4个字符拼接的字符串。
那么若是参数中有负数呢?
例子:
var str = "niu li na"; console.log(str.substr(-3,4)); console.log(str.substr(3,-4)); console.log(str.substr(-4,-3));
结果:
从结果可知,substr()方法在遇到负的参数1的时候,会将其与长度相加,遇到负的参数2的时候,会将其转换为0。
总结:
- slice()方法与substring()的两个参数相同,但是处理前后参数大小和负参数的方法不同。
- substr()与前两个方法相比,参数2不同,在处理负参数的时候方法也不同。