js中截取字符的三种方法,分别是substring(),substr(),slice(),我们以前可能用过,但始终是一个这些方法有点让人迷惑,尤其是substring()和substr(),连方法名都差不多,下面就来详细看看它们的区别吧。相同点,这三个方法都可以截取字符串,返回一个新的字符串,即不会修改原字符串。这里>表示控制台输入,<表示控制台输出,下同://chromeconsole>vara='0123456789'a.substr(1,5)<"12345">a<"0123456789"//否changeoccurs这三种方法的区别在于参数不同。substringsubstring()方法用于提取字符串中两个指定下标之间的字符。语法string.substring(start,stop)参数参数说明start必需。一个非负整数,指定要提取的子字符串的第一个字符在字符串中的位置。停止可选。一个非负整数,比要提取的子字符串的最后一个字符在字符串中的位置大1。如果省略此参数,则返回的子字符串将一直到字符串的末尾。说明1.substring()方法返回的子串包括开始的字符,不包括结束的字符。//chromeconsole>vara='0123456789'a.substring(1,5)<"1234"2.如果参数start和stop相等,则该方法返回空字符串(即长度是0字符串)。//chromeconsole>vara='0123456789'a.substring(1,1)<""3.如果start大于stop,该方法将在提取子字符串之前交换两个参数。//chromeconsole>vara='0123456789'a.substring(5,1)//=>a.substring(1,5)<"1234"4.如果start和stop为负数,则它会自动把这个参数置0,然后继续上面的规则。//chromeconsole>vara='0123456789'a.substring(5,-1)//=>a.substring(5,0)//=>a.substring(0,5)<"1234“5。如果start和stop有正数小数(负数直接去第4项),那么参数会向下舍入,然后继续上面的规则。//chromeconsole>vara='0123456789'a.substring(5,2.5)//=>a.substring(5,2)//=>a.substring(2,5)<"234"6.如果start和stop中有字符串,则先执行parseInt(),如果转换结果为NaN,则转为0,其他情况继续上述规则。//chromeconsole>vara='0123456789'a.substring(5,'2.5')//=>a.substring(5,2)//=>a.substring(2,5)<"234">a.substring(5,'ss')//=>a.substring(5,NaN)//=>a.substring(5,0)//=>a.substring(0,5)<《01234》其他情况不一一测试。当然,一般情况下尽量不要这样做。毕竟语法上已经规定是整数了。substrsubstr()方法从开始下标开始的字符串中提取指定数量的字符。语法string.substr(start,length)参数参数说明start必需。要提取的子字符串的起始下标。必须是数值。如果为负数,则该参数指定从字符串末尾算起的位置。也就是说,-1表示字符串中的最后一个字符,-2表示倒数第二个字符,依此类推。长度可选。子字符串中的字符数。必须是数值。如果省略此参数,则返回从字符串开头到结尾的字符串。说明一下,这个方法和substring()最大的区别在于第二个参数是你需要截取的字符串的长度,而不是位置。1、substr()方法返回的子串,从start(含)处的字符截取到长度length,如果超出结尾,则在结尾处结束。//chromeconsole>vara='0123456789'a.substr(1,5)<"12345">a.substr(1,15)//只到最后,没用了<"123456789"2.start可以取负值,表示从字符串末尾开始算到头部(从右往左,注意是从1开始,比如-1表示字符串的最后一个字符),但是截取长度仍然是从左到右,如果超出了终点,则在终点结束。//chromeconsole>vara='0123456789'a.substr(-4,2)//-4表示右数第四个,也就是'6',然后取一个长度为2的字符串,即is'67'<"67"3.如果长度为负值,直接当0处理,最后返回""。//chromeconsole>vara='0123456789'a.substr(4,-2)//=>a.substr(4,0)<""4.如果start或length是小数,那么它将截断小数部分。//chromeconsole>vara='0123456789'a.substr(1.2,5.2)//=>a.substr(1,5)<"12345"5.如果start和length有字符串,那么ParseInt()会先执行,如果转换结果为NaN,则转换为0,其他情况继续上述规则。//chromeconsole>vara='0123456789'a.substr('aa','5')//=>a.substr(0,5)<"01234"sliceslice()方法可以提取字符部分字符串并将提取的部分作为新字符串返回。语法string.slice(start,end)参数参数说明开始必须。要提取的段的起始下标。如果为负数,则此参数指定从字符串末尾算起的位置。也就是说,-1指的是字符串的最后一个字符,-2指的是倒数第二个字符,依此类推。结束可选。紧跟在要提取的段末尾之后的下标。如果不指定该参数,则提取的子串包括原字符串从头到尾的字符串。如果此参数为负数,则指定从字符串末尾开始的位置。该方法的两个参数是位置坐标,类似于subtring。不同的是这个方法支持负数,不会换仓。它总是从头到尾。如果区间不存在,则返回''。1.slice()方法返回的子串包括开始的字符,不包括结束的字符。//chromeconsole>vara='0123456789'a.slice(1,5)<"1234"2.当start或end为负值时,定位方式同substr,从右数到left,Startwith1.//chromeconsole>vara='0123456789'a.slice(1,-1)//起点从第一个(含)开始,终点从第一个from开始从右到左(不包括)<"12345678"3.从开始到结束的顺序总是从左到右。如果start的最终位置在end的右边,则返回''。//chromeconsole>vara='0123456789'a.slice(2,1)//2的位置为'2',1的位置为'1',from2=>1,direction代替,返回为空<"">a.slice(-2,1)//-2位于'8'处,1位于'1'处,从8=>1,方向相反,则returnisEmpty<"">a.slice(-2,-1)//-2的位置是'8',-1的位置是'9',从8=>9,方向正常,andreturnis'8''<"8"4.其他情况同substring处理。//chromeconsole>vara='0123456789'a.slice('xx','5.5')//=>a.slice(0,5)<"01234"从上面的测试总结一下,substring不支持负数,其他两种方法支持负数表示,从右边第一位开始计数。substr的第二个参数是长度,这是与其他两种方式最大的区别。slice的方向性比较强,从start=>end一直对应left=>right。以上结论都是在最新的谷歌浏览器上测试的,IE和Firefox没有测试过。