slice支持负数索引且不交换参数顺序,substring将负数转0并自动交换start与end;二者均不修改原字符串,省略end时都截取到末尾。

JavaScript中slice和substring都用于截取字符串,但它们对负数参数和参数顺序的处理逻辑不同,容易混淆。
slice:支持负数索引,按实际位置计算
slice(start, end)中的参数可以是负数,表示从字符串末尾开始计数(-1 是最后一个字符)。它不会自动交换参数顺序,若start > end,返回空字符串。
-
"hello".slice(1, 4)→"ell" -
"hello".slice(-4, -1)→"ell"(等价于slice(1, 4)) -
"hello".slice(3, 1)→""(不交换,直接返回空)
substring:负数转0,自动调整参数顺序
substring(start, end)会把所有负数参数视为0,且如果start > end,内部会自动交换两者位置。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
-
"hello".substring(1, 4)→"ell" -
"hello".substring(-2, 3)→"hel"(-2 被当作 0,即substring(0, 3)) -
"hello".substring(4, 1)→"ell"(自动变成substring(1, 4))
共同点:都不修改原字符串,返回新字符串
两者都是纯函数式操作,原字符串保持不变。省略第二个参数时,都截取到末尾:
-
"hello".slice(2)→"llo" -
"hello".substring(2)→"llo"
建议使用场景
需要从末尾取字符时用slice(支持负索引);需要容错性、不怕参数顺序颠倒时可考虑substring。现代开发中更推荐slice,语义清晰且与数组方法一致。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










