String 中 slice、substring、substr 的使用方法

区别

slice

截取从 start 位置开始, end 位置结束(不包含 end) 的字符串,返回一个新字符串

若参数为负数,需要从尾部位置倒数 负数参数长度 作为生效位置

start 大于 end ,则返回空字符串

start 大于字符串长度,返回空字符串

substring

截取从 start 位置开始, end 位置结束(不包含 end) 的字符串,返回一个新字符串

不支持负数,若有负数,将会重置为 0

start 大于 end ,会将两者位置对调

start 大于字符串长度,返回空字符串

substr

截取从 start 位置开始, 截取长度为 length返回一个新字符串

start 为负数,需要从尾部位置倒数 start长度 作为生效位置

length 不支持负数,若 length 为负数,会被重置成 0,将返回空字符串

start 大于字符串长度,返回空字符串

备注:ECMAscript 没有对该方法进行标准化,因此反对使用它


一、slice

使用语法

s.slice(start, end)

说明

截取从 start 位置开始, end 位置结束(不包含 end) 的字符串,返回一个新字符串

若参数为负数,需要从尾部位置倒数 负数参数长度 作为生效位置

start 大于 end ,则返回空字符串

start 大于字符串长度,返回空字符串

例子

let s = '12345678'

应用场景

1. 没有参数, 从 0 开始到结束位置进行截取
s.slice()  // s = '12345678'  --->  '12345678'

2. 一个参数
2.1 
    正数:从 start 开始到结束位置进行截取,超出总长度,返回空字符串
    s.slice(0)  // s = '12345678'  --->  '12345678'
    s.slice(1)  // s = '12345678'  --->  '2345678'
    s.slice(10)  // s = '12345678'  --->  ''

2.2 
    负数:若参数为负数,需要从尾部位置倒数 `负数参数长度` 作为生效位置
    (可将负数参数与字符串长度相加即可得到生效数值)
    s.slice(-2)  // s.slice(6) ---> s = '12345678'  --->  '78'

3. 两个参数
3.1 
    正数:从 start 开始到 end 位置进行截取
    s.slice(1, 2)  // s = '12345678'  --->  '2'

3.2 
    负数:若参数为负数,需要从尾部位置倒数 `负数参数长度` 作为生效位置
    (可将负数参数与字符串长度相加即可得到生效数值)
    s.slice(5, -1)  // s.slice(5, 7) ---> s = '12345678'  --->  '67'
    s.slice(-2, -1)  // s.slice(6, 7) ---> s = '12345678'  --->  '7'
    s.slice(-1, -2)  // s.slice(7, 6) ---> s = '12345678'  --->  ''

二、substring

使用语法

s.substring(start, end)

说明

截取从 start 位置开始, end 位置结束(不包含 end) 的字符串,返回一个新字符串

不支持负数,若有负数,将会重置为 0

start 大于 end ,会将两者位置对调

start 大于字符串长度,返回空字符串

例子

let s = '12345678'

应用场景

1. 没有参数, 从 0 开始到结束位置进行截取
s.substring()  // s = '12345678'  --->  '12345678'

2. 一个参数
2.1
    正数:从 start 开始到结束位置进行截取,超出总长度,返回空字符串
    s.substring(0)  // s = '12345678'  --->  '12345678'
    s.substring(1)  // s = '12345678'  --->  '2345678'
    s.substring(10)  // s = '12345678'  --->  ''

2.2
    负数:若参数为负数,重置为 0
    s.substring(-2)  // s.substring(0) ---> s = '12345678'  --->  '12345678'

3. 两个参数
3.1
    正数:从 start 开始到 end 位置进行截取
    start 若比 end 大,将会将两者位置对调 
    s.substring(1, 2)  // s = '12345678'  --->  '2'
    s.substring(2, 1)  // s.substring(1, 2) ---> s = '12345678'  --->  '2'

3.2
    负数:若参数为负数,重置为 0
    start 若比 end 大,将会将两者位置对调 
    s.substring(5, -1)  // s.substring(5, 0) ---> s.substring(0, 5) ---> s = '12345678'  --->  '12345'
    s.substring(-2, -1)  // s.substring(0, 0) ---> s = '12345678'  --->  '0'

三、substr

使用语法

s.substr(start, length)

说明

截取从 start 位置开始, 截取长度为 length返回一个新字符串

start 为负数,需要从尾部位置倒数 start长度 作为生效位置

length 不支持负数,若 length 为负数,会被重置成 0,将返回空字符串

start 大于字符串长度,返回空字符串

例子

let s = '12345678'

应用场景

1. 没有参数, 从 0 开始到结束位置进行截取
s.substr()  // s = '12345678'  --->  '12345678'

2. 一个参数
2.1
    正数:从 start 开始到结束位置进行截取,超出总长度,返回空字符串
    s.substr(0)  // s = '12345678'  --->  '12345678'
    s.substr(1)  // s = '12345678'  --->  '2345678'
    s.substr(10)  // s = '12345678'  --->  ''

2.2
    负数:若 start 为负数,需要从尾部位置倒数 `start长度` 作为生效位置
    (可将 start 与字符串长度相加即可得到生效数值)
    s.substr(-2)  // s.substr(6) ---> s = '12345678'  --->  '78'

3. 两个参数
3.1
    正数:从 start 开始,截取长度为 length
    s.substr(1, 2)  // s = '12345678'  --->  '23'
    s.substr(2, 1)  // s = '12345678'  --->  '3'

3.2
    负数:若 start 为负数,需要从尾部位置倒数 `start长度` 作为生效位置
    (可将 start 与字符串长度相加即可得到生效数值)
    若 length 为负数,会被重置成 0,将返回空字符串
    s.substr(5, -1)  // s.substr(5, 0) ---> s = '12345678'  --->  ''
    s.substr(-2, 1)  // s.substr(6, 1) ---> s = '12345678'  --->  '7'