Javascript 字符串操作方法slice()、substring()和substr()方法的区别

  ECMAScript提供了三个基于子字符串创建新字符串的方法:slice()、substring()和substr(),这三个方法斗湖返回被操作字符串的一个子字符串,而且也都接受一或两个参数。那么这三个方法的区别是什么呢?

一、slice()

  • 语法:stringObject.slice(start,end)
  • 参数:
参数描述
start 要抽取的片断的起始下标。如果是负数,则该参数规定的是从字符串的尾部开始算起的位置。也就是说,-1 指字符串的最后一个字符,-2 指倒数第二个字符,以此类推。
end 紧接着要抽取的片段的结尾的下标。若未指定此参数,则要提取的子串包括 start 到原字符串结尾的字符串。如果该参数是负数,那么它规定的是从字符串的尾部开始算起的位置。
  • 返回值:一个新的字符串。包括字符串 stringObject 从 start 开始(包括 start)到 end 结束(不包括 end)为止的所有字符。
  • 例子:
var str = "niu li na";
console.log(str.slice(2,7));
console.log(str);
  • 结果:

  可以从结果看到,开始的index为2,即从2开始,直到第二个参数-1为止,也就是6,所以返回的是index为2-6的子字符串。slice()方法不会改变原字符串。

  那么若是参数中有负数呢?

  例子:

var str = "niu li na";
console.log(str.length);
console.log(str.slice(-6,7));
console.log(str.slice(2,-5));
console.log(str.slice(-9,-7));

  结果:

  从结果可知,slice()方法在遇到负的参数的时候,会将这个负值与字符串的长度相加。

  那么若是参数1大于参数2呢?

  例子:

var str = "niu li na";
console.log(str.slice(7,5));

  结果为“”。

二、substring()

  • 语法:stringObject.substring(start,end)
  • 参数:
参数描述
start 必需。一个非负的整数,规定要提取的子串的第一个字符在 stringObject 中的位置。
stop

可选。一个非负的整数,比要提取的子串的最后一个字符在 stringObject 中的位置多 1。

如果省略该参数,那么返回的子串会一直到字符串的结尾。

  

  • 返回值:一个新的字符串。包括字符串 stringObject 从 start 开始(包括 start)到 end 结束(不包括 end)为止的所有字符。
  • 例子:
var str = "niu li na";
console.log(str.substring(3,7));
console.log(str);

  结果:

  可以从结果看到,开始的index为3,即从3开始,直到第二个参数-1为止,也就是6,所以返回的是index为3-6的子字符串。substring()方法不会改变原字符串。

  那么若是参数中有负数呢?

  例子:

var str = "niu li na";
console.log(str.substring(-7,-3));
console.log(str.substring(-5,7));
console.log(str.substring(3,-7));

  结果:

  从结果可知,substring()方法在遇到负的参数的时候,会将这个负值转化为0。

  那么若是参数1大于参数2呢?

  例子:

var str = "niu li na";
console.log(str.substring(9,3));

  结果:

  

  当参数1大于参数2时,substring()方法会将参数1作为参数2,参数2作为参数1。

三、substr()

  • 语法:stringObject.substr(start,length)
  • 参数:
参数描述
start 必需。要抽取的子串的起始下标。必须是数值。如果是负数,那么该参数声明从字符串的尾部开始算起的位置。也就是说,-1 指字符串中最后一个字符,-2 指倒数第二个字符,以此类推。
length 可选。子串中的字符数。必须是数值。如果省略了该参数,那么返回从 stringObject 的开始位置到结尾的字串。
  • 返回值:一个新的字符串,包含从 stringObject 的 start(包括 start 所指的字符) 处开始的 length 个字符。如果没有指定 length,那么返回的字符串包含从 start 到 stringObject 的结尾的字符。
  • 例子:
var str = "niu li na";
console.log(str.substr(3,4));

  结果:

  substr()返回从参数1开始的参数2个字符,也就是说从index为3的字符开始,返回4个字符拼接的字符串。

  那么若是参数中有负数呢?

  例子:

var str = "niu li na";
console.log(str.substr(-3,4));
console.log(str.substr(3,-4));
console.log(str.substr(-4,-3));

  结果:

  从结果可知,substr()方法在遇到负的参数1的时候,会将其与长度相加,遇到负的参数2的时候,会将其转换为0。

  

  总结:

  • slice()方法与substring()的两个参数相同,但是处理前后参数大小和负参数的方法不同。
  • substr()与前两个方法相比,参数2不同,在处理负参数的时候方法也不同。
原文地址:https://www.cnblogs.com/niulina/p/5703961.html