3

slice,substring,substr三个函数都是截取字符串。

先看方法的签名

slice(start, end); // 参数可为负数。第二个参数是指定结束位置。
substring(start, end); // 参数为负数被替换成0。交换参数位置,小的在前。第二个参数是指定结束位置。
substr(start, length); // 参数可为负数。第二个参数是指定截取长度。

从签名可以看出 substr 和其他两个的差别,substr第二个参数指定截取的长度,slice和substirng第二个参数指定截取的结束位置, 例:

var s = 'helloworld';
a.substr(2, 5); // 'llowo'
a.slice(2, 5); // 'llo'
a.substring(2, 5) // 'llo'

slice和substring的差别在于slice的参数可以是负数,而substring不行。

slice中的start如果为负数,会从尾部算起,-1表示倒数第一个,-2表示倒数第2个,end同理,但是换算后end的位置一定要在start之后,否则返回空字符串。

substring会取start和end中较小的值为start,二者相等返回空字符串,任何一个参数为负数被替换为0(即该值会成为start参数)。

// substring会取start和end中较小的值为start
s.substring(3, 2); // 'l'
s.substring(2, 3); // 'l'

// 二者相等返回空字符串
s.substring(3,3); // ''

// 任何一个参数为负数被替换为0, 相当于 s.substring(0, 2);
s.substring(-1, 2); // 'he'
// 相当于 s.substring(0, 0);
s.substring(-1, -2); // '' 

substr的参也可以为负数,当第一个参数为负数时,会从尾部算起,-1表示倒数第一个,-2表示倒数第2个...。第二个为负值是始终返回空字符串。

s.substr(-2, 1); // 'l'
s.substr(-2, 0); // ''
s.substr(-2, -1); // ''

// 第一个参数为负数时,绝对值大于字符串长度时替换为0
s.substr(-10, 2); // 'he'

c1生不换
95 声望0 粉丝

The best way to build large things is to stitch small things together.