区别

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'

都读到最后了、留下个建议如何