这是我参与更文挑战的第17天,活动详情查看: 更文挑战
前言
字符串有很多方法,一般方法名不同,功能不同,不怎么容易会搞混;
但是有这么3个方法,substr, substring, slice。它们功能相似,都是截取字符串,名称也相似,有时候经常会搞混,今天就好好来复习一下。(如果已经理解的童鞋又想复习的可以直接滑到总结部分查看)
substr
语法:
str.substr(start[, length]) 不改变原字符串,返回一个从start开始,长度为length的字符串。
start默认是0,代表第一个字符, length可以省略,代表到结束位置。 如果start大过str的长度,则返回空字符串。
var str = 'hello world'
console.log(str.substr(2, 2)) // 从第三个字符开始,取长度为2的字符 输出ll
console.log(str.substr(2)) // 第二个参数省略相当于到结束位置,输出 llo world
console.log(str.substr(12)) // 输出空字符串,因为start大过str的长度
现在讲的都是正数的,如果是负数该怎么计算?
- 如果start是负数,则用start加上str的length的结果当作start的值,但是如果加上之后还是负数,则把start当作0。
- 如果length是负数或者0,则返回空字符串。
var str = 'hello world' // str.length 等于11
console.log(str.substr(-2, 2)) // -2 + 11 = 9 相当于 str.substr(9, 2) 输出ld
console.log(str.substr(-12)) // 输出hello world,因为start加上str的长度还是负数,start当作0
console.log(str.substr(2, -2)) // 输出空字符串,因为length是负数
substring
语法:
str.substring(start[, end]) 不改变原字符串,第一个参数是字符串的开始索引,
0为第一个字符, 第二参数是字符串的结束索引,截取从start到end(不含end)的字符串,省略end则截取到结尾。
var str = 'hello world'
console.log(str.substring(2, 4)) // 输出ll
console.log(str.substring(2)) // 第二个参数省略相当于到结束位置,输出 llo world
console.log(str.substring(2, 2)) // 输出空字符串,因为start和end一样了
console.log(str.substring(12)) // 输出空字符串因为start大过str的长度
补充一下:
- 如果start或者end是负数,则当作是0;
- 如果start大于end,则互换位置;
var str = 'hello world'
console.log(str.substring(-2, 2)) // 输出he, -2当作0
console.log(str.substring(2, -2)) // 输出he, -2当作0,然后又互换位置,相当于(0,2)
console.log(str.substring(4, 2)) // 输出ll 因为4和2互换位置
slice
语法:
str.substring(start[, end]) slice跟substring很像,不改变原字符串,第一个参数是字符串的开始索引,
0为第一个字符, 第二参数是字符串的结束索引,截取从start到end(不含end)的字符串,省略end则截取到结尾。
var str = 'hello world'
console.log(str.slice(2, 4)) // 输出ll
console.log(str.slice(2)) // 第二个参数省略相当于到结束位置,输出 llo world
console.log(str.slice(2, 2)) // 输出空字符串,因为start和end一样了
console.log(str.slice(12)) // 输出空字符串因为start大过str的长度
输出跟substring一样
它跟substring的主要区别是:
- start或者end如果是负数,则会把它与str的length相加再赋值给它,如果相加还是负数,则当作0;
- 如果start大于end,不会互换位置;
var str = 'hello world'
console.log(str.slice(-2, 2)) // 输出空字符串,-2 当作 -2 + 11 = 9,相当于(9,2)
console.log(str.slice(2, -2)) // 输出llo wolr, -2当作 -2 + 11 = 9,相当于 (2,9)
console.log(str.slice(4, 2)) // 输出空字符串,不会互换位置
总结
substr(start[, length])
- 不改变原字符串,第一个参数是字符串的开始索引,
0为第一个字符, 第二参数是length,代表多少长度的字符,截取从start开始,length长度的字符串,省略length则截取到结尾。 - 如果start是负数,则用start加上str的length的结果当作start的值, 但是如果加上之后还是负数,则把start当作0。
- 如果length是负数或者0,则返回空字符串。
- 如果start大于字符串的length,则也返回空字符串。
substring(start[, end])
- 不改变原字符串,第一个参数是字符串的开始索引,
0为第一个字符, 第二参数是字符串的结束索引,截取从start到end(不含end)的字符串,省略end则截取到结尾。 - 如果start或者end是负数,则当作是0;
- 如果start大于end,则互换位置;
slice(start[, end])
- 不改变原字符串,第一个参数是字符串的开始索引,
0为第一个字符, 第二参数是字符串的结束索引,截取从start到end(不含end)的字符串,省略end则截取到结尾。 - start或者end如果是负数,则会把它与str的length相加再赋值给它,如果相加还是负数,则当作0;
- 如果start大于end,不会互换位置;
以上就是我总结的substr, substring, slice的异同,希望能帮助到你们~