三个基于子字符串创建新字符串的方法:slice()、substr()、substring()的区别

       这三个方法都会返回被操作字符串的一个子字符串,而且也都接受一个或两个参数。第一个参数指定子字符串的开始位置,第二个参数(在指定的情况下)表示子字符串到哪里结束。

  • slice() substring() 的第二个参数指定的是子字符串最后一个字符后面的位置(留头不留尾)。
  • substr() 的第二个参数指定则是返回的字符个数。

       如果没有给这些方法传递第二个参数,则将字符串长度作为结束位置。与 concat() 方法一样,这三个方法也不会修改字符串本身的值——它们只返回一个基本类型的字符串值,对原始字符串没有任何影响

var stringValue = 'hello world'

alert(stringValue.slice(3))            // 'lo world'
alert(stringValue.substring(3))        // 'lo world'
alert(stringValue.substr(3))           // 'lo world'
alert(stringValue.slice(3, 7))         // 'lo w'
alert(stringValue.substring(3, 7))     // 'lo w'
alert(stringValue.substr(3, 7))        // 'lo worl'

       上面例子比较了调用三个不同方法的结果,大多数情况下结果相同。主要区别还是在于 substr() 方法的第二个参数是指返回字符串的个数。在传递给这些方法的参数是负数的情况下,它们的行为就不尽相同了。

  • slice() 方法会将传入的负值与字符串的长度相加。
  • substring() 方法会把所有的负数参数都转换为0。
  • substr() 方法将负的第一个参数加上字符串的长度,而将负的第二个参数转换为0。
var stringValue = 'hello world'

alert(stringValue.slice(-3))            // 'rld'
alert(stringValue.substring(-3))        // 'hello world'
alert(stringValue.substr(-3))           // 'rld'
alert(stringValue.slice(3, -4))         // 'lo w'
alert(stringValue.substring(3, -4))     // 'hel'
alert(stringValue.substr(3, -4))        // ''

       上面例子可以看除三个方法之间的不同行为。

       在给 slice() 和 substr() 传递一个负值参数时,它们的行为相同。这是因为 -3 会被转换为 8(字符串长度参数 11+(-3)=8),实际上相当于调用了 slice(8) 和 substr(8)。但 substring() 方法则返回了全部字符串,因为它将 -3 转换成了0。

       当第二个参数是负值时候,这三个方法的行为各不相同。slice() 方法会把第二个参数转换为7,这就相当于 slice(3, 7),因此返回 'lo w'。substring() 方法会将第二个参数转换为0,使调用变成了 substring(3, 0),而由于这个方法会将较小的数作为开始位置,将较大的数作为结束位置,因此最终相当于调用了 substring(0, 3)。substr() 也会将第二个参数转换为0,这也就意味着返回包含零这个字符串的字符串,也就是一个空字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值