substr方法 描述如下:
substr( Number start, Number length ) : String
可以看出第一个数字表示起始位置,第二个数字确定了截取长度,返回截取后的字符串。
str = "abcdefghijk"; str.substr(1,2);//从序号为1的字符开始,截取2个字符 str.substr(3);//只有一个参数则理解为截取到end,从序号为3的字符开始截取至最后。 str.substr(2,-5); //截取长度竟然是负数,返回为空字符串''
下面是初始位置为负的情况:
str.substr(-3,2);
FF 和 Chrome下 表示从序号为-3的字符开始(-1位置表示最后一个字符,-2表示倒数第二个字符,以此类推),截取2个字符。
设X负整数,y为正整数,则str.substr(x,y)
当 -str.length<x<0时 看作 str.substr(str.length -|x| ,y)或者说str.substr(str.length+x ,y),
当-str.length>=x时 看做 str.substr(0 ,y)
上面这种我自己称作负数转正原则。
IE下面
设X负整数,y为正整数,则str.substr(x,y) 恒等于str.substr(0 ,y)
这种暂且称之为负数清0原则
Substr 在不同浏览器下具有差异性,FF/Chrome 下遵守负数转正原则
IE下则遵守负数清0原则
substring描述如下:
subString( Number indexA, [Number indexB] ) : String
第一个数字表示起始位置,第二个数字表示的也是截取的位置
var anyString = "Sencha"; // 显示 "Sen" print(anyString.substring(0,3)); print(anyString.substring(3,0)); //等同于print(anyString.substring(0,3));//这种特性我称作交换律原则 // 显示 "Sencha" print(anyString.substring(0,6)); print(anyString.substring(0,10));//多了也不要紧
下面是位置含负值的情况
anyString.substring(-4,6)
结果等同于anyString.substring(0,6)
结论 substring遵守负数清0原则、交换律原则 且不存在浏览器差异性
最后说下slice
slice( Number beginSlice, Number endSlice ) : String
两个参数同样都表示 截取位置(与substring类似)
str = ‘0123456’ str.slice(-5,6) //结果等同于str.slice(2,6) slice遵循负数转正原则,不存在浏览器差异性 str.slice(6,-5) //为空 所以不遵循 交换律原则
总结 substr 第一个参数为截取位置 第二个为截取数量 (肯定不遵循交换律原则)在IE8下遵守负数清0原则 FF/Chrome下遵守负数转正原则
substring 两个参数均为截取位置,满足交换律原则 IE8/FF/Chrome下 遵守负数清0原则
slice两个参数均为截取位置,不满足交换律 IE8/FF/Chrome下 遵守负数转正原则
PS:交换律,负数清0,负数转正 这些‘原则’都是我自己起的名字 具体内容上文中有解释说明