substr substring 与 slice

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,负数转正 这些‘原则’都是我自己起的名字 具体内容上文中有解释说明

转载于:https://www.cnblogs.com/pacific0437/archive/2012/11/05/2755016.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值