JS提取字符串方法:substring、substr、slice的区别

这三个方法都是提取字符串里面子串的方法,虽然平时使用挺多,但是每次都要去看文档以防参数传递错误。下面对这三个方法做一个详细的区别。

substring

String.substring(x,y):
x:必需。一个非负的整数,规定要提取的子串的第一个字符在 stringObject 中的位置。
y:可选。一个非负的整数,比要提取的子串的最后一个字符在 stringObject 中的位置+ 1

//2个参数的情况
"abcdefg".substring(1,4); //"bcd"

//1个参数的情况:返回开始位置到字符串的结尾
"abcdefg".substring(1); //"bcdefg"

//如果x=y:返回一个空串(即长度为 0 的字符串)
"abcdefg".substring(1,1); //""

//如果x>y:先交换这两个参数然后同第一种情况
"abcdefg".substring(4,1); //"bcd"

//如果x<0或y<0;会把小于0的参数当作0处理(理论上不接受负数);
"abcdefg".substring(1,-4); 
=》"abcdefg".substring(1,0); 
=》"abcdefg".substring(0,1); //"a"

slice

String.slice(x,y):
x:必需。要抽取的片断的起始下标。如果是负数,则该参数规定的是从字符串的尾部开始算起的位置。也就是说,-1 指字符串的最后一个字符,-2 指倒数第二个字符,以此类推。
y:可选。要抽取的片段的结尾的下标+1。若未指定此参数,则要提取的子串包括 start 到原字符串结尾的字符串。如果该参数是负数,那么它规定的是从字符串的尾部开始算起的位置。

//2个参数的情况
"abcdefg".slice(1,4); //"bcd"

//1个参数的情况:返回开始位置到字符串的结尾
"abcdefg".slice(1); //"bcdefg"

//如果x=y:返回一个空串(即长度为 0 的字符串)
"abcdefg".slice(1,1); //""

//如果x>y:返回一个空串(即长度为 0 的字符串)
"abcdefg".slice(4,1); //""

//如果x<0:从字符串的尾部开始算起的位置,-1 指字符串的最后一个字符,-2 指倒数第二个字符
//如果y<0:从字符串的尾部开始算起的位置,-1 指字符串的最后一个字符,-2 指倒数第二个字符
"abcdefg".slice(-1,8);//g
"abcdefg".slice(1,-4); //bc
*因为slice不能像substring一样当x<y的时候交换,所以必须y的位置在X之后,否则返回空串。

substr

String.substr(x,y):
x:必需。必需。要抽取的子串的起始下标。必须是数值。如果是负数,那么该参数声明从字符串的尾部开始算起的位置。也就是说,-1 指字符串中最后一个字符,-2 指倒数第二个字符,以此类推。
y:可选。子串中的字符长度。必须是数值。如果省略了该参数,那么返回从 stringObject 的开始位置到结尾的字串。

//2个参数的情况
"abcdefg".substr(1,4); //"bcde"

//1个参数的情况:返回开始位置到字符串的结尾
"abcdefg".substr(1); //"bcdefg"

//如果x<0;从字符串的尾部开始算起的位置。-1 指字符串中最后一个字符,-2 指倒数第二个字符,以此类推。
"abcdefg".substr(-1);//g 
"abcdefg".substr(-1,1);//g
重要事项:ECMAscript 没有对该方法进行标准化,因此反对使用它。

重要事项:在 IE 4 中,参数 start 的值无效。在这个 BUG 中,start 规定的是第 0 个字符的位置。在之后的版本中,此 BUG 已被修正。

总结

三个方法的第一个参数都是开始的位置,substring和slice的第二个参数是结束的位置(不包括该位置),slice和substr可以接受负值但是substr第二个参数是长度。

那么问题来了,怎么获取一个字符串的最后一个字符呢?

"abcdefg".substring(length-1);//g 
"abcdefg".slice(-1);//g 
"abcdefg".substr(-1);//g
"abcdefg".charAt(length-1);//g 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值