slice,substring,substr三个函数都是截取字符串。javascript
先看方法的签名java
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不行。code
slice中的start若是为负数,会从尾部算起,-1表示倒数第一个,-2表示倒数第2个,此时end必须为负数,而且是大于start的负数,不然返回空字符串。slice的end若是为负数,一样从尾部算起,若是其绝对值超过原字符串长度或者为0,返回空字符串。ip
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个...。第二个为负值是始终返回控制符串。string
s.substr(-2, 1); // 'l' s.substr(-2, 0); // '' s.substr(-2, -1); // '' // 第一个参数为负数时,绝对值大于字符串长度时替换为0 s.substr(-10, 2); // 'he'