spice,slice,substr,subsring傻傻分不清楚
字符串截取是我们平时经常用到的一个操作,而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"]