参数均为「正数」的情况:
- slice:第一个参数为开始的索引,第二个参数是结束的位置(该位置之前的字符串会被截取),只有一个参数的情况则截取到字符串的末尾;
- substring:会将比较小的参数作为开始的索引,比较大的参数作为结束的位置(该位置之前的字符串会被截取),只有一个参数的情况则截取到字符串的末尾;
- substr:第一个参数为开始的索引,第二个参数为截取出来的字符串的长度,只有一个参数的情况则截取到字符串的末尾;
- 三者都不会修改调用他们的字符串,只是返回新的字符串
- 索引从0开始
「举例」
let str = "abcdefg"
str.slice(1) // bcdefg
str.slice(1,3) // bc
str.substring(1) // bcdefg
str.substring(1,3) // bc
str.substring(3,1) // bc
str.substr(1) // bcdefg
str.substr(1,3) // bcd
参数有「负数」的情况:(会先做转换,再按照「正数」的情况进行截取子字符串,转换方式如下)
- slice:会用length去加上此负值,得到的结果作为参数
- substring:会将负数转换为0
- substr:第一个参数用length加上负值,第二个参数转换为0
「举例」
let str = "abcdefg" // str.length为7
str.slice(-3) // efg 相当于str.slice(4)
str.slice(-3,-2) // e 相当于str.slice(4,5)
str.slice(3,-2) // de 相当于str.slice(3,5)
str.substring(-3) // abcdefg 相当于str.substring(0)
str.substring(-3,-2) // "" 相当于str.substring(0,0)
str.substring(3,-2) // abc 相当于str.substring(3,0)
str.substring(-2,3) // abc 相当于str.substring(0,3)
str.substr(-3) // efg 相当于str.substr(4)
str.substr(-3,-2) // "" 相当于str.substr(4,0)
str.substr(3,-2) // "" 相当于str.substr(3,0)
str.substr(-2,3) // fg 相当于str.substr(5,3)