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 更合适。