substr,substring,slice 的区别
javascript中的三个函数substr,substring,slice都可以用来提取字符串的某一部分(函数名称都是小写,不要写成subStr,subString又或者Substring,记住js是区分大小写的),但是它们之间还是有一些区别的。
substring(start,end)和slice(start,end)都表示提取从start下标开始(包括该下标上的字符)到end下标结束(不包括该下标上的字符)之间的内容,如果不包含end参数则表示提取从start到结尾的全部字符
例1:
"9876543210".substring(0,2)-->"98"
"9876543210".slice(0,2)-->"98"
"9876543210".substring(5)-->"43210"
"9876543210".slice(5)-->"43210"
但是他们之间还是有区别的,
substring不支持负数参数(如果为负数则转换为0来处理),slice支持负数参数(如果参数为负数则表示从最右边算起,例1第一行中的0为-1,1为-2);substring如果end>start则互相交换,而slice则不支持交换
例2:
上面的slice中的-5从尾部0开始数刚好为4,-2则为1,因为不会包含end的字符所以提取了"432"
而substring则将-5,-2都转换为0来出来所以实际为"9876543210".substring(0,0)所以得到""的空字符串。
例3:
"9876543210".slice(5,1)-->""
"9876543210".substring(5,1)-->"8765"
上面的slice开始小标大于结束小标, 因为不支持交换所以只能得到""
substring则被解释为"9876543210".substring(1,5)所以得到了"8765"
下面来解释一下substr函数,为什么要将substr放到最后呢,因为substr其实是不是作为ECMAScript标准发布的,因此各种浏览器之间不是兼容的,但是既然提出来了还是讲一下
substr(start,length)函数可以看出其实和上面两种函数的差别,即第二个参数代表的是截取的长度,不再是作为结尾下标来处理,所以该函数表示从开始下标start开始,向右截取length个长度的字符。按照w3c上来讲start是支持负数的,即表示从字符传的结尾开始计算,但是因为该函数并不是标准里的所以各浏览器实现不一,所以还是不建议用负数了。length为负数则不会截取任何字符,因为长度不可能为负的
例4:
"9876543210".substr(2,3)-->"765"
"9876543210".substr(2,-1)-->""
第一个从开始下标为2的7开始,截取三个字符得到"765"
第二个因为长度为-1所以不做任何截取操作
例5:
"9876543210".substr(-5,2)-->"43"(FireFox)
"9876543210".substr(-5,2)-->"98"(IE)
看上面两个实现,FireFox中开始下标-5按照从尾部开始计算取倒数第5个数即4开始截取两个字符得到"43"
而IE下将-5转换为0因此从左开始计算得到0下标的9,再获取两个长度得到"98"
可以明显的看到因为不标准的缘故,实现方式产生了不一致。