本文详细解析JavaScript中substr和substring两个字符串截取方法的区别。substr基于起始索引和截取长度,支持负数索引从末尾计算;substring基于起始和结束下标,遵循“含头不含尾”原则。通过具体代码示例对比两者在参数传递、负数处理及截取逻辑上的不同,帮助开发者避免常见错误。
substr与substring的基本区别
在开发过程中,经常需要对字符串进行截取操作。起初我误以为IDE自动提示的substr和substring没有太大区别,便随意使用了前者。
实际上,这两个方法存在显著差异,下面将逐一说明。
substr方法的参数与行为
1. substr(index, length)
该方法用于从字符串的指定起始索引位置开始,提取指定数量的字符。
substr方法接受两个参数:index(起始索引)和length(截取长度)。
当index为非负整数时:
a. 如果不传入任何参数,返回原始字符串。
例如:"abcdefg".substr() 的结果为 "abcdefg"
b. 如果仅传入一个参数index,则从该位置截取到字符串末尾。
例如:"abcdefg".substr(2) 的结果为 "defg"
当index为负整数时:
c. 若传入负数索引,则从字符串末尾向前计数,起始位置为1,直到负数的绝对值对应的位置。截取方向仍是从前向后。
例如:"abcdefg".substr(-2) 的结果为 "fg",等价于 "abcdefg".substr(-2 + "abcdefg".length)
substring方法的参数与行为
2. substring(start, end)
该方法用于提取字符串中两个指定下标之间的字符。
substring同样接受两个参数,但均为下标值,下标从0开始计算。截取的范围长度等于这两个下标的差值。
可以理解为“含头不含尾”的规则。
例如:"abcdefg".substring(2,4) 的结果为 "cd"