substring
和 substr
是两个用于从字符串中提取子字符串的方法。虽然它们都能实现类似的功能,但它们的使用方式和行为略有不同。
1. 参数差异
substring(start, end)
- start:子字符串的起始索引(包括)。
- end:子字符串的结束索引(不包括)。如果省略,则截取到字符串末尾。
示例:
javascript
let str = "Hello, world!";
console.log(str.substring(7, 12)); // "world"
console.log(str.substring(7)); // "world!"
substr(start, length)
- start:子字符串的起始索引。如果为负数,则从字符串末尾开始计算。
- length:子字符串的长度。如果省略,则截取到字符串末尾。
示例:
javascript
let str = "Hello, world!";
console.log(str.substr(7, 5)); // "world"
console.log(str.substr(7)); // "world!"
2. 负值处理
substring
:如果start
或end
为负数,则被视为 0。
javascript
let str = "Hello, world!";
console.log(str.substring(-3, 5)); // "Hello"
substr
:如果start
为负数,则从字符串末尾开始计算索引。
javascript
let str = "Hello, world!";
console.log(str.substr(-6, 5)); // "world"
3. 参数顺序处理
substring
:如果start
大于end
,则substring
会交换这两个值。
javascript
let str = "Hello, world!";
console.log(str.substring(12, 7)); // "world"
substr
:参数顺序不会被交换,start
总是起始索引。
javascript
let str = "Hello, world!";
console.log(str.substr(7, 12)); // "world!"
4. 使用场景
substring
:适合提取基于索引的子字符串,特别是需要使用两个索引来定义子字符串的范围时。substr
:适合提取基于起始索引和长度的子字符串,特别是在需要处理负索引时很有用。
总结
substring(start, end)
:通过起始索引和结束索引来提取子字符串,处理负值为 0,会交换start
和end
的值。substr(start, length)
:通过起始索引和长度来提取子字符串,负值从字符串末尾开始计算,参数顺序不会被交换。
选择哪个方法取决于具体的使用场景和需求。如果你需要根据起始索引和长度来提取子字符串,substr
更适合。如果你需要根据两个索引范围来提取子字符串,substring
更合适。