欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spice,slice,substr,subsring傻傻分不清楚

程序员文章站 2022-05-29 11:49:43
...

字符串截取是我们平时经常用到的一个操作,而slice,substr,substring这三个方法都可以实现,平时也是有点傻傻分不清楚,参数老是记不清哪个是长度,哪个是索引,用的时候百度参数,下次用又有点模糊,所以这次整理记录一下吧~

1.slice(start,end)左闭右开  [start,end)--字符串与数组均可用,参数相同

start--必需,正数表示字符串起始下标,负数表示从目标字符串的尾部算起。

end--可选参数,省略时默认表示从start开始到目标字符串的尾部,为负数表示从目标字符串的尾部算起。

返回值:一个新的字符串; 不改变原始字符串 

var str = '12345678';
str.slice(1,4) // "234"
str.slice(1,-2) // "23456"
str.slice(1) //"2345678"
str.slice(-2,3) // ""
str.slice(4,2) // ""
str.slice(-4,-2) // "56"
str.slice(-3) // "678"

slice用于数组时,不会修改数组,返回新的子数组

var arr= [1,2,3,4,5];
arr.slice(1,3) //  [2, 3]
arr.slice(1) // [2, 3, 4, 5]
arr.slice(1,-2) // [2, 3]
arr.slice(-3,-2) // [3]
arr.slice(-3,0) // []

2.substr (start,length)

start--必需,正数表示字符串起始下标,负数表示从目标字符串的尾部算起。

length--可选参数,省略时默认表示从start开始到目标字符串的尾部;为负数,视为长度0,返回空字符串。

返回值:一个新的字符串; 不改变原始字符串

var str = '12345678';
str.substr(1,4) // "2345"
str.substr(1,-3) // ""
str.substr(4,0) // ""
str.substr(-4, 2) // "56"
str.substr(-3) // "678"

3.substring(start,end)- 左闭右开  [start,end)

substring() 不接受负的参数

start--必需。一个非负的整数,规定要提取的子串的第一个字符在 stringObject 中的位置。

end--可选。一个非负的整数,如果省略该参数,那么返回的子串会一直到字符串的结尾。

返回值:一个新的字符串,该字符串值包含 stringObject 的一个子字符串,其内容是从 start 处到end-1 处的所有字符,其长度为 end start(负数都会当做0处理)

var str = '12345678';
str.substring(1,4)  // "234"
str.substring(1,-2) // "1"
str.substring(1) //"2345678"
str.substring(-2,3) // "123"
str.substring(4,2) // "34"
str.substring(-4,-2) // ""
str.substring(-3) // "12345678"

tips:1.如果参数 start 与 end 相等,那么该方法返回的就是一个空串(即长度为 0 的字符串);2.如果 start 比 end 大,那么该方法在提取子串之前会先交换这两个参数。

综上所述三者的区别:

1.第2个参数。slice,substring中表示字符串的结束位置,substr中表示长度。

2.参数可否为负数。slice方法比较灵活两个参数都可以为负数,substr只有第一个参数可以为负数,substring两个参数都为非负数。

      3.第1个参数大于第2个参数时。substring比较灵活,回交换参数位置,substr第二个参数是长度故不受影响,slice开始位置在结束位置后面则返回空字符串。

注意:负数表示从字符串末尾开始计算,例如:-1表示字符串最后一个字符,-2表示字符串倒数第二个字符;

 在IE下可能并不支持负数从末尾开始计算的方式

三个函数的参数存在负数简易规则:

slice(start,end) 将负数与字符长度相加 
           substr(start, length) 将负的第一个参数与长度相加,负的第二个参数为0 
           substring(start,end) 将所有负参数转换为0


splice (index,howmany,item1,.....,itemX)

还有一个名字和slice很像的splice~ ,这个其实是用于数组处理的一个方法啦,在这里一并记录一下,用于区分slice

index-必需。规定从何处添加/删除元素。

howmany必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素, (负数当做0处理)

item1, ..., itemX--可选。要添加到数组的新元素

返回值---返回的是含有被删除的元素的新数组,原数组会被改变(数组也是一个对象)

var arr= ['apple', 'banana', 'grape', 'peach'];
arr.splice(1)  //  ["banana", "grape", "peach"]     arr:["apple"]
arr.splice(-1)  // ["peach"]      arr: ["apple", "banana", "grape"]
arr.splice(2,0)  // []         arr: ["apple", "banana", "grape", "peach"]
arr.splice(2,1,'pear') // ["grape"]     arr: ["apple", "banana", "pear", "peach"]
arr.splice(1,-2) // []     arr: ["apple", "banana", "grape", "peach"]
arr.splice(1,-2, 'sss') // []  arr: ["apple", "sss", "banana", "grape", "peach"]