JavaScript中substr方法已被废弃,推荐用substring(不支持负索引,参数为起始和结束位置)或slice(支持负索引,行为更接近substr)替代,注意substr第二个参数是长度而另两者是结束索引。

JavaScript中substr方法已被废弃,不建议在新项目中使用。它虽仍能运行,但ECMAScript规范已将其标记为“遗留功能”,未来可能被移除。推荐改用substring或slice,两者更标准、语义更清晰,且行为更可预测。
用substring替代substr(推荐用于简单截取)
substring(start, end)按起始和结束索引提取子串,不支持负数索引,超出范围的值会被自动修正(如负数转为0,大于长度的值转为字符串长度)。
- 原
str.substr(2, 5)→ 改为str.substring(2, 7)(注意第二个参数是结束位置,不是长度) - 原
str.substr(-3)无法直接对应 → 需先计算:str.substring(str.length - 3) - 若只传一个参数(如
substr(3)),等价于substring(3),即从索引3到末尾
用slice替代substr(推荐用于需负数索引的场景)
slice(start, end)支持负数索引(从末尾计数),行为与substr更接近,且不会自动修正越界值(越界时静默处理,返回空串或截断结果)。
- 原
str.substr(2, 5)→str.slice(2, 7) - 原
str.substr(-3)→str.slice(-3)(简洁直观) - 原
str.substr(-5, 2)→str.slice(-5, -3)(负起始+负结束)
注意边界细节,避免常见陷阱
substr的第二个参数是“长度”,而substring和slice的第二个参数是“结束索引”(不包含)。这是最易出错的地方。
立即学习“Java免费学习笔记(深入)”;
- 错误写法:
str.substring(2, 5)想取5个字符 → 实际只取索引2~4共3个字符 - 正确换算:若原为
substr(start, len),则新写法为substring(start, start + len)或slice(start, start + len) - 当
start + len超过字符串长度时,三者都会自然截断,无需额外判断
现代开发建议
优先使用slice,尤其在需要处理末尾子串(如文件扩展名、URL路径片段)时,负索引让代码更简洁可靠。若团队强调兼容性且不涉及负索引,substring也是安全选择。避免再出现substr调用,可通过ESLint规则no-obsolete-functions或自定义规则主动拦截。










