JavaScript提供了三个主要的字符串截取方法: substr() 、 substring() 和 slice()
。然而,在现代JavaScript开发中,越来越多的开发者和团队开始推荐使用 slice() 作为首选方案。
三种方法的基本语法对比
首先,让我们回顾一下这三种方法的基本用法:

substr() 已被标记为弃用
首先需要明确的一点是: **substr() 方法已被标记为弃用 ** 。
为什么被弃用?
- ** 参数语义混乱 ** :
substr(start, length)的第二个参数是长度,与其他方法不一致 - ** 负值处理不一致 ** :在某些环境中行为可能不同
- ** 标准化问题 ** :不是ECMAScript核心规范的一部分
substring() vs slice() 详细对比
虽然 substring() 仍然是标准方法,但 slice() 在多个方面表现更优。
1. 负索引处理

2. 参数顺序处理

3. 行为一致性
const str = "Consistent Behavior";
// slice() 的行为更可预测
function safeSlice(str, start, end) {
return str.slice(start, end);
}
// substring() 的隐式转换可能导致意外结果
function riskySubstring(str, start, end) {
return str.substring(start, end); // 参数可能被意外交换
}
// 测试边界情况
console.log(safeSlice(str, 5, 2)); // "" (明确的空结果)
console.log(riskySubstring(str, 5, 2)); // "nsis" (意外的结果)
✅ slice() 的优势
- ** 标准稳定 ** :属于ECMAScript核心规范,不会被弃用
- ** 行为一致 ** :与数组的
slice()方法行为一致 - ** 功能强大 ** :支持负索引,提供更灵活的截取方式
- ** 逻辑清晰 ** :参数含义明确,不会自动交换参数位置
- ** 可预测性 ** :边界情况处理更符合直觉
- ** 兼容性好 ** :所有现代环境都完美支持
❌ 其他方法的问题
- **
substr()** :已被弃用,未来可能被移除 - **
substring()** :参数交换和负数转换行为可能导致意外结果