小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
slice()、substr()和substring()这3个方法是js中操作字符串比较常用的方法,但是它们的具体用法很多小伙伴却不是了然于胸。下面对它们的使用方法进行总结,记录如下:
共同点
都返回调用它们的字符串的一个子字符串,而且都接收一或两个参数,第一个参数表示子字符串开始的位置。
不同点
对slice()和substring()而言,第二个参数是提取结束的位置(即该位置之前的字符会被提取出来)。对substr()而言,第二个参数表示返回的子字符串数量。任何情况下,省略第二个参数都意味着提取到字符串末尾。
注意点: slice()、substr()和substring()也不会修改调用它们的字符串,而只会返回提取到的原始新字符串值。 substring,slice两种方法的第二个参数在截取时,不包含该位值,如下例子。简单记为含头不含尾
使用方法
let str = "hello world";
// substring,slice两种种方法返回的字符串是一样的,substr第二个参数是截取字符长度
console.log(str.substring(3, 7));//"lo w"
console.log(str.slice(3, 7));//"lo w"
console.log(str.substr(3, 7));//"lo worl"
// 省略第二个参数时,三种方法返回的字符串是一样的
console.log(str.substring(3));//"lo world"
console.log(str.slice(3));//"lo world"
console.log(str.substr(3));//"lo world"
当某个参数是负值时,这3个方法的行为又有不同。
- slice()方法将所有负值参数都当成字符串长度加上负参数值。
- substr()方法将第一个负参数值当成字符串长度加上该值,将第二个负参数值转换为0。
- substring()方法会将所有负参数值都转换为0。
看下面的例子:
let str = "hello world";
//slice()方法将所有负值参数都当成字符串长度加上负参数值,所以此例等同于str.slice(8)
console.log(str.slice(-3));//"rld"
//此例等同于str.substr(8)
console.log(str.substr(-3));//"rld"
//此例等同于str.substring(0)
console.log(str.substring(-3));//"hello world"
//此例等同于str.slice(3, 7)
console.log(str.slice(3,-4));//"lo w"
//此例第二个参数会被转换为0,即str.substr(3,0)意味着返回的字符串包含零个字符,因而会返回一个空字符串。
console.log(str.substr(3,-4));//""
//这个方法会将较小的参数作为起点,将较大的参数作为终点。因此此例等同于str.substring(0,3),
console.log(str.substring(3,-4));//"hel"