JavaScript中substring、substr与slice截取字符串的区别详解

作者:木棉时间:2026-10-22 14:30:27浏览:543

本文详细解析JavaScript中截取字符串的三种常用方法:substring、substr和slice。重点对比它们在单参数、双参数及负数参数下的行为差异,特别是slice与substring对负索引的不同处理逻辑,以及IE浏览器中substr处理负值的兼容性问题,帮助开发者准确选择合适的方法。

substring、substr 与 slice 基本用法

stringObject.substring(start,stop) 方法用于从字符串中提取指定下标范围内的字符。

start 参数是必需的,它代表一个非负整数,指定了子串起始字符在 stringObject 中的索引位置。

stop 参数是可选的,它指定了子串结束位置的前一个字符索引(即不包含 stop 本身)。若省略此参数,提取操作将延伸至字符串末尾。

start从0开始 到stop(不包含stop)结束 不接受负的参数。

stringObject.substr(start,length) 方法用于从字符串中提取从 start 索引开始的指定长度字符。

start 参数是必需的数值,表示子串的起始下标。若为负数,则从字符串尾部反向计算位置,例如 -1 表示最后一个字符,-2 表示倒数第二个字符。

length 参数是可选的数值,指定要提取的字符数量。若省略,则返回从 start 位置到字符串末尾的所有字符。

stringObject.slice(start,end) 方法用于提取字符串的指定片段,并返回一个新的字符串。

start 参数指定提取片段的起始下标。若为负数,则从字符串尾部反向计算,-1 代表最后一个字符,-2 代表倒数第二个字符,依此类推。

end 参数指定提取片段的结束下标(不包含 end 本身)。若省略,则提取从 start 到字符串末尾的部分;若为负数,同样从字符串尾部反向计算位置。

该方法返回的新字符串包含从 start(含)到 end(不含)之间的所有字符。


string.slice()
string.substring()
string.substr()
var stringValue = “hello world”;
alert(stringValue.slice(3));     //”lo world”
alert(stringValue.substring(3));   //”lo world”
alert(stringValue.substr(3));    //”lo world”
alert(stringValue.slice(3,7));     //”lo w”
alert(stringValue.substring(3,7));  //”lo w”
alert(stringValue.substr(3,7));    //”lo worl”

当仅传入一个参数 n 时,三种方法均从第 n 个位置(索引从0开始)开始提取,直至字符串末尾。

当传入两个参数 n 和 m 时,slice 和 substring 均返回从第 n 个位置到第 m 个位置(不含 m)的子串,而 substr 则返回从第 n 个位置开始的 m 个字符。

单参数与双参数行为对比


string.slice()
string.substring()
string.substr()
var stringValue = “hello world”;
alert(stringValue.slice(-3));     //”rld”
alert(stringValue.substring(-3));   //”hello world”
alert(stringValue.substr(-3));    //”rld”
alert(stringValue.slice(3,-4));     //”lo w”
alert(stringValue.substring(3,-4));  //”hel”
alert(stringValue.substr(3,-4));    //”"(空字符串)

负数参数处理机制与兼容性问题

处理负数参数时,slice 会将负索引与字符串长度相加后计算;substr 会将第一个负参数与字符串长度相加,但第二个参数若为负则转为 0;substring 则将所有负数参数强制转换为 0。

值得注意的是,IE 浏览器的 JavaScript 实现在处理 substr() 方法的负数参数时存在兼容性问题,可能会直接返回原始字符串而非预期结果。

总结

以上介绍了 JavaScript 中三种字符串截取方法的用法与区别。希望本文能帮助您根据具体需求选择合适的方法。如有任何疑问,欢迎留言交流,我们将及时回复。感谢支持!

作者最新文章