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必须为负数,并且是大于start的负数,否则返回空字符串。slice的end如果为负数,同样从尾部算起,如果其绝对值超过原字符串长度或者为0,返回空字符串。
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'