字符串方法slice、substr以及substring的区别

JavaScript中字符串的常用方法还是有不少的,那么我们今天来谈谈截取字符串的常用方法吧;首先我们常用截取字符串的方法有三个,分别是slice,substr和substring

首先我们先谈一谈这三个方法的共同点,第一,它们的返回值都是一个新的字符串,不会修改源数据,并且他们都接收一个或者两个参数,他们的第一个参数都是截取的起始索引,如果不传第二个参数那就是从起始索引直接截取到结尾

const str1 = 'hello World'

console.log(str1.slice(3))  //lo World
console.log(str1.substr(3))  //lo World
console.log(str1.substring(3))  //lo World

如果传了第二个参数,那么结果就会有些变化了,那么接下来我们可以再通过代码来测试一下三者之间有什么区别

const str2 = 'hello World'

console.log(str2.slice(3,7))  //lo W
console.log(str2.substr(3,7))  //lo Worl
console.log(str2.substring(3,7))  //lo W

上述代码中,三个方法都传了两个参数,结果确实有些不一样,slice和substring都返回lo w,返回的是从索引3到索引7,并且不包含索引7,而substr返回值是lo Worl,返回的是从索引3开始,截取7个长度。当然了,如果上述三个方法中总长度没有7,那结果是什么呢,结果是直接截取到结尾

const str3 = 'hello'

console.log(str3.slice(3,7))  //lo
console.log(str3.substr(3,7))  //lo 
console.log(str3.substring(3,7))  //lo

其实我们参数还可以传入负数的

const str4 = 'hello'

console.log(str4.slice(-1))  //o
console.log(str4.substr(-1))  //o 
console.log(str4.substring(-1))  //hello

当我们第一个参数传入负数的时候,slice和substr会把负数转换成length+(-1),实际上就相当于调用了slice(4)和substr(4),但是substring会把负数转换成0,所以他就相当于substring(0),所以他会返回整个字符串

当我们第二个参数传入负数的时候,那么结果又会怎么样呢,会不会和第一个参数做同样的处理呢

const str5 = 'hello'

console.log(str5.slice(2,-1))  //ll
console.log(str5.substr(2,-1))  // 
console.log(str5.substring(2,-1))  //he

当第二个参数传负数的时候,slice会把第二个参数当作length+(-1),实际上就变成了slice(2,4),substr会把第第二个参数当成0,实际上就变成了substr(2,0),所以会返回一个空字符串,因为长度为0,substring他会把第二个参数也当作0,即substring(2,0),但是substring他自己本身会默认把较小的参数作为起点,即substring(2,0)会变成substring(0,2),所以返回字符串he

好了,关于这三个方法的使用到这里就结束了,如果各位大佬有不同你的见解请留言,勿喷,谢谢

上一篇:go数组与切片


下一篇:字符串函数 slice() substring() substr() 的区别