JS中字符串截取函数的对比

引言

  • 在js中,字符串处理是很重要的;
  • 常用的字符串的截取函数有三个,分别是slice()、substring()、substr();
  • 他们的区别在哪里呢?我做了一点小研究;

slice(start, end)函数

  • 截取值包含start不包含end;
  • start如果为负数,会从尾部算起,-1表示倒数第一个,-2表示倒数第2个,此时end必须为负数,并且是大于start的负数,否则返回空字符串;
  • slice的end如果为负数,同样从尾部算起,如果其绝对值超过原字符串长度或者为0,返回空字符串;
1
2
3
4
5
6
7
8
9
10
11
12
<script>
var s = "abcdefgh";

console.log(s.slice(1,3)); //bc
console.log(s.slice(4,10)); //efgh (end超过字符串长度)
console.log(s.slice(10,11)); //空字符串 (start超过字符串长度)

console.log(s.slice(-3, -1)); //fg
console.log(s.slice(-2,1)); //空字符串 (start若为负值,end必须也为负值)
console.log(s.slice(-10, -3)); //abcde (start负值超过了字符串长度)
console.log(s.slice(-12,-10)); //空字符串 (end负值超过了字符串长度)
</script>

substring(start, end)函数

  • 截取值包含start不包含end;
  • 不允许操作数为负数;
  • 取start和end中较小的值为start,二者相等返回空字符串,任何一个参数为负数被替换为0(即该值会成为start参数);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script>
var s = "abcdefgh";

console.log(s.substring(1,3)); //bc
console.log(s.substring(4,10)); //efgh (end超过字符串长度)
console.log(s.substring(10,11)); //空字符串 (start超过字符串长度)

console.log(s.substring(3,1)); //bc

console.log(s.substring(-3, -1)); //空字符串
console.log(s.substring(-2,1)); //a (-2被替换成0)
console.log(s.substring(-10, -3)); //空字符串
console.log(s.substring(-12,-10)); //空字符串
</script>

substr(start, length)函数

  • 其第二个参数表示要截取的长度,而不是截取的终点,若该参数为负数或0,都将返回空字符串;
  • start参数可以为负值;
1
2
3
4
5
6
7
8
9
10
11
<script>
var s = "abcdefgh";

console.log(s.substr(1,3)); //bcd
console.log(s.substr(3,1)); //d
console.log(s.substr(-2,1)); //g
console.log(s.substr(4,10)); //efgh (end超过字符串长度)
console.log(s.substr(10,5)); //空字符串 (start超过字符串长度)

console.log(s.substr(-3, -1)); //空字符串
</script>
您的支持是对我最大的鼓励!