substr(start, length); // 参数可为负数。第二个参数是指定截取长度。
slice(start, end); // 参数可为负数。第二个参数是指定结束位置。
substring(start, end); // 参数为负数被替换成0。交换参数位置,小的在前。第二个参数是指定结束位置。
substr() 函数:
substr() 方法可在字符串中抽取从 开始 下标开始的指定数目的字符。
注意: substr() 方法不会改变源字符串。
slice函数:
slice() 方法可从已有的数组中返回选定的元素。
slice()方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
注意: slice() 方法不会改变原始数组。
substring 函数:
substring() 方法用于提取字符串中介于两个指定下标之间的字符。
substring() 方法返回的子串包括 开始 处的字符,但不包括 结束 处的字符。
var s = '0123456789';
s.substr(2, 5); // 23456
s.slice(2, 5); // 234
s.substring(2, 5) // 234
s.substr(2); // 23456789
s.slice(2); // 23456789
s.substring(2) // 23456789
区别:
slice和substring的差异在于slice的参数能够是负数,而substring不行。
slice中的start若是为负数,会从尾部算起,-1表示倒数第一个,-2表示倒数第2个,此时end必须为负数,而且是大于start的负数,不然返回空字符串。slice的end若是为负数,一样从尾部算起,若是其绝对值超过原字符串长度或者为0,返回空字符串。
s.substr(-6) // 456789
s.slice(-6) // 456789
substring会取start和end中较小的值为start,两者相等返回空字符串,任何一个参数为负数被替换为0(即该值会成为start参数)。
substr()
方法被标记为已弃用
substr() 方法存在一些问题,比如当第一个参数为负数时会导致不直观的行为,这可能会引起错误的理解和使用。因此,JavaScript 社区建议不再使用 substr() 方法,并推荐使用更为可靠和清晰的替代方法。
s.substring(-2,5) // 01234
替代方案:substring() 和 slice()
在修复使用 substr() 方法的代码时,可以考虑使用 substring() 或 slice() 方法来获取字符串的子串。这两个方法都能接受起始和结束位置作为参数,并返回指定范围内的子字符串。