其中slice()、substring()都接收2个参数,分别为在字符串的起始位置和终止位置,返回这2者之间的子字符串,不包括终止位置的那个字符。即接收2个参数,包前不包后。

如果第二个参数不设置,则默认为字符串的长度,即从起始位置到结束位置。例如:

var str = "abcd西汉姆efg南怀瑾";

一、substring()与slice()函数的比较

   //情景一:二个参数,从开始位置到结束位置(不包括结束位置)

   //表示截取字符串从【开始位置】0到【结束位置,并且不包含结束位置】3的结果是:abc

   var str1 = str.slice(0, 3);  

   //表示截取字符串从【开始位置】0到【结束位置,并且不包含结束位置】3的结果是:abc

   var str2 = str.substring(0,3);

   //情景二:一个参数,从开始位置一直到整个字符串

   //表示截取字符串从【开始位置】3到【整个字符长度】str.length的结果是:d西汉姆efg南怀瑾

   var str1 = str.slice(3);      //d西汉姆efg南怀瑾

   //表示截取字符串从【开始位置】3到【整个字符长度】str.length的结果是:d西汉姆efg南怀瑾

   var str2 = str.substring(3);   //d西汉姆efg南怀瑾

   //情景三:二个参数,第一个参数大于第二个参数(包含第二个参数为负数)

   var str3 = str.slice(3, -2);      //d西汉姆efg南

   var str4 = str.substring(3,-2);   //abc


结论:对于substring与slice函数的区别主要是对于参数为负数的情况。

负参数对于slice()来说,是从字符串的末尾往前计数;

对于substring()而言,直接忽略负参数,作为0来处理。并将2个参数中较小的作为起始位置,将较大的作为结束位置。

即str.substring(3,-2)等价于str.substring(3,0),等价于str.substring(0,3);


二、substring()与substr()函数的比较

   var str5 = str.substr(3,-2);   //结果为空

   var str6 = str.substr(3,0);   //结果为空

   var str7 = str.substr(3,2);   //d西

   var str8 = str.substr(3);   //d西汉姆efg南怀瑾


通过上面的结果可以看到substr()指的是从开始位置截取指定个长度的字符,如果第二个参数小于1,则表示截取0个字符;若第二个参数不写,则默认是截取从开始位置到结束位置的所有字符。