Js中截取字符串
时间: 2025-07-21 09:58:30 浏览: 2
<think>我们被要求总结JavaScript中字符串截取的三个主要方法:substring, substr, 和 slice。根据提供的引用资料,我们可以总结如下:
1. **substring(startIndex [, endIndex])**
- 参数:`startIndex` 表示起始索引(包含),`endIndex` 表示结束索引(不包含)。
- 特点:
- 如果任一参数为负数,则被视为0。
- 如果 `startIndex` 大于 `endIndex`,则方法会自动交换这两个参数。
- 如果省略 `endIndex`,则截取到字符串末尾。
- 示例:`"0123456789".substring(3,5)` 返回 `"34"`。
2. **substr(startIndex [, length])**
- 参数:`startIndex` 表示起始索引(包含),`length` 表示要截取的长度。
- 特点:
- 如果 `startIndex` 为负数,则从字符串末尾开始计算(-1表示最后一个字符)。
- 如果 `length` 为0或负数,则返回空字符串。
- 如果省略 `length`,则截取到字符串末尾。
- 示例:`"0123456789".substr(3,5)` 返回 `"34567"`。
3. **slice(startIndex [, endIndex])**
- 参数:`startIndex` 表示起始索引(包含),`endIndex` 表示结束索引(不包含)。
- 特点:
- 支持负数索引,负数表示从字符串末尾开始计算。
- 如果 `startIndex` 大于 `endIndex`(且没有负数的情况),则返回空字符串(不会交换参数)。
- 如果省略 `endIndex`,则截取到字符串末尾。
- 示例:`"0123456789".slice(3,5)` 返回 `"34"`;`"0123456789".slice(-3)` 返回 `"789"`。
根据以上总结,我们可以编写回答,并按照要求生成相关问题。
注意:引用资料中有些地方描述不一致,我们以最准确的引用为准(例如引用[4]和引用[5])。同时,我们注意到引用[1]和引用[2]中有一些描述可能不准确,比如引用[1]说substr()的第一个参数表示从尾部开始截取(实际上只有负数才表示从尾部),所以我们会以多个引用中一致的部分为准。
现在,我们按照要求编写回答:</think>### JavaScript 字符串截取方法详解
在 JavaScript 中,`substring()`、`substr()` 和 `slice()` 都是用于字符串截取的方法,但它们的参数规则和行为有显著差异:
#### 1. **`substring(startIndex [, endIndex])`**
- **参数规则**:
- `startIndex`:起始索引(包含)
- `endIndex`:结束索引(不包含),可选
- **负数处理**:所有负数参数会被视为 `0`
- **参数交换**:若 `startIndex > endIndex`,会自动交换位置
- **特点**:
```javascript
"0123456789".substring(3, 5); // "34"(索引3-4)
"0123456789".substring(5, 3); // "34"(自动交换参数)
"0123456789".substring(-2, 3); // "012"(负数转0)
```
- **适用场景**:需忽略负数索引或自动处理参数顺序时[^2][^5]。
#### 2. **`substr(startIndex [, length])`**
- **参数规则**:
- `startIndex`:起始索引(支持负数,从末尾计算)
- `length`:截取长度(若为负/0则返回空串)
- **特点**:
```javascript
"0123456789".substr(3, 5); // "34567"(从索引3截5位)
"0123456789".substr(-3); // "789"(倒数第3位到末尾)
"0123456789".substr(3, -1); // ""(长度负数返回空)
```
- **适用场景**:需从末尾截取或明确指定长度时[^1][^3][^5]。
#### 3. **`slice(startIndex [, endIndex])`**
- **参数规则**:
- `startIndex`/`endIndex`:均支持负数(从末尾计算)
- **无参数交换**:若 `startIndex > endIndex`,返回空串
- **特点**:
```javascript
"0123456789".slice(3, 5); // "34"(索引3-4)
"0123456789".slice(-3, -1); // "78"(倒数第3到倒数第2)
"0123456789".slice(5, 3); // ""(不交换参数)
```
- **适用场景**:需灵活使用负数索引或严格保持参数顺序时[^4][^5]。
---
### **关键区别总结**
| 方法 | 参数含义 | 负数处理 | 参数交换 | 空值条件 |
|--------------|--------------------|------------------------|----------|------------------------|
| `substring` | 起始索引, 结束索引 | 负数转0 | 自动交换 | 参数为负或无效范围 |
| `substr` | 起始索引, 长度 | 支持负数(从末尾计算) | 无 | 长度≤0 |
| `slice` | 起始索引, 结束索引 | 支持负数(从末尾计算) | 无 | 起始索引 > 结束索引 |
> **通用规则**:
> - 所有方法均不修改原字符串(返回新字符串)[^2][^4]
> - 省略第二个参数时,默认截取到字符串末尾[^3][^5]
---
阅读全文
相关推荐

















