substr, substring, slice傻傻分不清楚

342 阅读4分钟

这是我参与更文挑战的第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的长度

现在讲的都是正数的,如果是负数该怎么计算?

  1. 如果start是负数,则用start加上str的length的结果当作start的值,但是如果加上之后还是负数,则把start当作0。
  2. 如果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的长度

补充一下:

  1. 如果start或者end是负数,则当作是0;
  2. 如果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的主要区别是:

  1. start或者end如果是负数,则会把它与str的length相加再赋值给它,如果相加还是负数,则当作0;
  2. 如果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])

  1. 不改变原字符串,第一个参数是字符串的开始索引,0为第一个字符, 第二参数是length,代表多少长度的字符,截取从start开始,length长度的字符串,省略length则截取到结尾。
  2. 如果start是负数,则用start加上str的length的结果当作start的值, 但是如果加上之后还是负数,则把start当作0。
  3. 如果length是负数或者0,则返回空字符串。
  4. 如果start大于字符串的length,则也返回空字符串。

substring(start[, end])

  1. 不改变原字符串,第一个参数是字符串的开始索引,0为第一个字符, 第二参数是字符串的结束索引,截取从start到end(不含end)的字符串,省略end则截取到结尾。
  2. 如果start或者end是负数,则当作是0;
  3. 如果start大于end,则互换位置;

slice(start[, end])

  1. 不改变原字符串,第一个参数是字符串的开始索引,0为第一个字符, 第二参数是字符串的结束索引,截取从start到end(不含end)的字符串,省略end则截取到结尾。
  2. start或者end如果是负数,则会把它与str的length相加再赋值给它,如果相加还是负数,则当作0;
  3. 如果start大于end,不会互换位置;

以上就是我总结的substr, substring, slice的异同,希望能帮助到你们~