String.prototype.substr() 是一个非标准方法,虽然很多浏览器依然支持它,但它已经被 ECMAScript 标准移除(deprecated),所以在现代项目中建议避免使用。
你可以使用 substring() 或 slice() 来替代它。
🔍 slice() 方法详解
✅ 语法:
str.slice(beginIndex[, endIndex])
| 参数 | 类型 | 说明 |
|---|---|---|
beginIndex | Number | 起始位置(包含该索引) |
endIndex(可选) | Number | 结束位置(不包含该索引) |
✅ 返回值:
返回从 beginIndex 到 endIndex(不含)的字符串子串。
🔧 特性:
- 支持负数索引:从字符串尾部开始计数,
-1表示最后一个字符。 - 不改变原字符串:返回的是新字符串。
- 可处理越界索引:不会抛异常,会自动处理。
✅ 常见示例
🎯 1. 提取前几个字符:
const str = "Hello, world!";
console.log(str.slice(0, 5)); // "Hello"
🎯 2. 去掉最后一个字符:
const str = "abcde";
console.log(str.slice(0, -1)); // "abcd"
🎯 3. 提取最后三个字符:
const str = "abcdef";
console.log(str.slice(-3)); // "def"
🎯 4. 复制整个字符串:
const str = "copy me";
console.log(str.slice()); // "copy me"
🎯 5. 超出范围也不报错:
const str = "short";
console.log(str.slice(0, 100)); // "short"
🚫 常见误区:
❌ slice(start, length) ❌
很多人从 substr 习惯过来,会写成:
str.slice(0, 5) // ✅ 正确:表示索引0到索引5(不含)
str.substr(0, 5) // ❌ 表示从0开始取5个字符
🧠 记住:
slice()的第二个参数是 结束索引(不含) ,不是长度!
📌 使用场景总结:
| 场景 | 推荐用法 |
|---|---|
| 获取前 N 个字符 | str.slice(0, N) |
| 去掉最后 N 个字符 | str.slice(0, -N) |
| 获取最后 N 个字符 | str.slice(-N) |
| 提取中间一段 | str.slice(start, end) |
如果你习惯操作数组,其实数组的 slice() 语法和行为也是一样的,易于记忆。