在 JavaScript 中,substr()
和 substring()
函数都是用于提取字符串的子串,但它们有一些区别:
substr(start, length)
:substr()
函数从指定索引位置开始提取指定长度的字符。它接受两个参数:起始索引start
和要提取的字符数length
。如果省略length
参数,则会提取从起始索引到字符串末尾的所有字符。start
参数可以是负数,表示从字符串末尾开始计数。例如:const str = 'Hello, world!'; const sub1 = str.substr(7, 5); // "world" const sub2 = str.substr(-6); // "world!"
在上面的示例中,
sub1
提取了从索引 7 开始的 5 个字符,而sub2
提取了从倒数第 6 个字符开始到字符串末尾的所有字符。substring(start, end)
:substring()
函数从指定的两个索引位置之间提取子串,包括起始索引位置但不包括结束索引位置。它接受两个参数:起始索引start
和结束索引end
。如果省略end
参数,则会提取从起始索引到字符串末尾的所有字符。start
和end
参数都可以是负数,表示从字符串末尾开始计数。如果start
大于end
,则substring()
会交换这两个参数的值。例如:const str = 'Hello, world!'; const sub1 = str.substring(7, 12); // "world" const sub2 = str.substring(7); // "world!" const sub3 = str.substring(-6); // "Hello, world!" const sub4 = str.substring(12, 7); // "world"(参数交换)
在上面的示例中,
sub1
提取了从索引 7 到索引 11 的字符,sub2
提取了从索引 7 开始的所有字符,sub3
提取了整个字符串(负数索引被视为 0),而sub4
也提取了从索引 7 到索引 11 的字符,即使参数的顺序是颠倒的。
需要注意的是,substr()
和 substring()
在处理负数索引和参数交换方面的行为略有不同。因此,在使用这些函数时应注意其差异,并根据具体需求选择适当的函数。