slice和subStr和substring区别

slice和subStr和substring区别

相同点:

  • 都不会改变原始字符串
  • 第一个参数都是指定字符串的开始位置
  • 第二个参数不传则将字符串的尾部作为结束位置

不同点:

  • slice(startIndex,endIndex) 第一个参数指定字符串的开始位置,第二个参数指定字符串的结束位置
  • substring(index0,index1)会将小的参数作为开始位置,大的作为结束位置
  • substr(startIndex, num),第一个参数指定字符串的开始位置,第二个参数要返回的字符个数
  • slice参数为负值时,会将负值与字符串的长度相加得到开始和结束位置
  • substring参数为负值时,会将所有的负值参数转换成0
  • substr方法将负的第一个参数加上字符串的长度得到开始位置,将负的第二个参数转换为0
    tip 包前不包后

一、关于substring()

substring(start,stop)表示返回从start开始到stop处之间的新字符串,其长度为stop减 start。包含start,但不包含stop,且不修改原字符串。这一点与slice的含头不含尾相近。例如:

var str = "0123456789";
console.log(str.substring(1,5))//"1234" length为5-1
console.log(str.substring(0,9),str)//"012345678"  "0123456789"

其中start是必填项,stop为选填项,如果stop不填,那表示从start截取到字符串结尾,例如:

var str = "0123456789";
console.log(str.substring(1))//"123456789"

如果 start比stop大,那么方法在执行前会先交换这两个参数。例如:

var str = "0123456789";
console.log(str.substring(8,4))//"4567"

如果 start与stop相等,那么会返回一个空的字符串。例如:

var str = "0123456789";
console.log(str.substring(6,6))//""

如果 start或stop为负数,那么方法在执行前会先将负数变为0。例如:

var str = "0123456789";
console.log(str.substring(-2,6))//"012345"
console.log(str.substring(2,-6))//"01"
console.log(str.substring(-2,-6))//""

二、关于substr()

substr(start,length)表示返回从start开始包含length长度的新字符串,包含start,且不修改原字符串,与substring相比,第二个参数由代表结束的下标stop变成了规定新字符串长度的length,例如:

var str = "0123456789";
console.log(str.substr(1,5))//"12345" length为5
console.log(str.substr(2,6),str)//"234567" "0123456789"

其中start是必填项,length为选填项,如果length不填,那表示从start截取到字符串结尾,例如:

var str = "0123456789";
console.log(str.substr(1))//"123456789"

如果start为负数,那么start=str.length+start,例如:

var str = "0123456789";
console.log(str.substr(-1))//"9"
console.log(str.substr(-6,3))//"456"

如果length为负数或者0,那么返回空字符串,例如:

var str = "0123456789";
console.log(str.substr(1,0))//""
console.log(str.substr(-1,-1))//""
console.log(str.substr(-1,0))//""

三、关于slice()

首先要说的是,slice可操作数组和字符串,但substring和substr只能操作字符串,splice只能操作数组。

slice(start,stop)表示截取从下标start 到下标stop(不包括该元素)的之间的元素,并返回新数组/新字符串,并不修改原数组/原字符串,这点上面说了,与substring很相似。例如:

var str = "0123456789";
    arr = [0,1,2,3,4,5,6,7,8,9];
console.log(str.slice(1,6))//"12345"
console.log(arr.slice(1,6))//[1,2,3,4,5]

其中start是必填项,stop为选填项,如果stop不填,那表示从start截取到数组结尾/字符串结尾,例如:

var str = "0123456789";
    arr = [0,1,2,3,4,5,6,7,8,9];
console.log(str.slice(1))//"123456789"
console.log(arr.slice(1))//[1,2,3,4,5,6,7,8,9]

如果 start比stop大(不会互换),或start与stop相等,则截取的为空,例如:

复制代码

var str = "0123456789";
    arr = [0,1,2,3,4,5,6,7,8,9];
console.log(str.slice(3,3))//""
console.log(arr.slice(3,3))//[]
console.log(str.slice(6,5))//""
console.log(arr.slice(6,5))//[]

复制代码
需要特别注意的是,如果 start或者stop为负数,那么负数的选项从数组尾部开始算起的位置,最后一个数字为-1,倒数第二个数字为-2,依次类推。例如:

var str = "0123456789";
console.log(str.slice(6,-1))//"678"
console.log(str.slice(-6,-1))//"45678"
console.log(str.slice(-6,8))//"4567"

猜你喜欢

转载自blog.csdn.net/qq_44352182/article/details/89889778